科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VB.NET编程中调用Windows API

VB.NET编程中调用Windows API

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Windows API就是Windows系统的API函数简称

作者:马金虎 来源:天极网 2007年11月9日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 四.Visual Basic .Net读取文件中的图标的实现步骤:

  下面介绍的示例,其功能读取指定文件中包含的图标数目,并把这些图标全部显示出来。下面是这个示例的实现步骤:

  1. 启动Visual Studio .Net。

  2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3. 将【项目类型】设置为【Visual Basic项目】。

  4. 将【模板】设置为【Windows应用程序】。

  5. 在【名称】文本框中输入【Visual Basic .Net查看文件中的图标】。

  6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在【E:\VS.NET项目】目录中就产生了名称为【Visual Basic .Net查看文件中的图标】文件夹,里面存放着【Visual Basic .Net查看文件中的图标】项目的所有文件。具体如图02所示:


图02:【Visual Basic .Net查看文件中的图标】项目的【新建项目】对话框

  7. 选择菜单【项目】|【添加新项】,在弹出的对话框中的【模板】设置为【模块】,【名称】文本框设置为【Module1.vb】后。单击【打开】按钮,则在项目中增加了一个模板文件,名称为【Module1.vb】。

  8. 把Visual Stuido .Net的当前窗口切换到Module1.vb的代码编辑窗口,并在其Module1的代码区中添加下列代码,下列代码是用二种方式声明二个Windows API函数:

< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'声明ExtractIcon函数
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As Integer ) As Integer

  9. 把Visual Studio .Net的当前窗口切换到Form1窗体的设计查看,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到Form1窗体:

  四个Label组件,其中二个用以显示提示信息,另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目。

  一个ListView组件,利用其显示大图标的属性用以显示选定文件中的图标。

  一个OpenFileDialog组件,用以选择要查看图标的文件名称。

  一个ImageList组件,它起的是桥梁的作用,首先把从文件中导出的图标存放到这里,然后再提供ListView组件显示出来。

  一个Button组件。

  10. 按照表01中数值来设定设定组件的主要属性:

组件类型 组件名称 属性 设置结果
Form Form1 Text VB.NET查看文件中的图标
Form1 MaximizeBox False
Form1 MinimizeBox False
Form1 FormBorderStyle FixedSingle
ListView ListView1 ImageList1 LargeImageList
ListView1 MultiSelect False
ListView1 Size Size ( 380 , 208 )
Button Button1 Text 选择文件
Button1 FlatStyle Flat
ImageList ImageList1 Size Size ( 32 , 32 )
ImageList1 TransparentColor Color.Transparent
Label Label1 Text 文件名称:
Label2 Text 图标数目:
Label3 Text ""
Label4 Text "0"
    表01:【Visual Basic .Net查看文件中的图标】项目窗体中各组件的主要属性设定数值表

  并按照图02中各组件的位置、大小和排列方式来调整窗体中各个组件:


图02:【Visual Basic .Net查看文件中的图标】项目的设计界面

  11. 把Visual Studio .Net当前窗口切换到Form.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1组件的Click事件的处理代码,下列代码是在Button1组件的Click事件中处理查看文件中图标的功能,具体如下:

Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
If OpenFileDialog1.ShowDialog ( ) = DialogResult.OK Then
 '清除组件中的所有项目
 ListView1.Items.Clear ( )
 ImageList1.Images.Clear ( )
 Dim sfName As String = OpenFileDialog1.FileName
 Label3.Text = sfName
 Dim iIcon_Num As Integer = Icon_Num ( IntPtr.Zero , sfName , -1 )
 '显示文件中的图标数目
 Label4.Text = iIcon_Num.ToString ( )
 Dim i As Integer
 For i = 0 To iIcon_Num - 1 Step 1
  '强制实现int到uint类型转换
  Dim j As UInt32
  j = System.Convert.ToUInt32 ( i )
  Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , j )
  '在imageList1组件中加入当然提取的图标
  ImageList1.Images.Add ( Icon.FromHandle ( hIcon ).ToBitmap ( ) )
  '在ListView组件中加入一个项目
  ListView1.Items.Add ( "第" + ( i + 1 ).ToString ( ) + "个图标" )
  '把加入项目的图象索引指向刚才加入图标在imagList1组件中的索引,从而显示图标
  ListView1.Items ( i ).ImageIndex = i
 Next i
End If
End Sub

  12. 至此,在上述步骤都正确执行后,【Visual Basic .Net查看文件中的图标】项目的全部工作就完成了。单击快捷键F5就可以运行程序,此时单击【选择文件】按钮选择文件后,程序就能够读取这个文件中的图标及其数目,并显示出来了。具体如图03所示:


图03:【Visual Basic .Net查看文件中的图标】项目的运行界面

  五.总结:

  解决Visual Basic .Net查看文件中的图标的关键并非是使用.Net框架中提供的类库,而是使用Windows的API函数。虽然这与利用Visual Basic .Net开发跨平台程序的初衷相违背,但的确不失为一种解决问题的方法。有些时候通过Windows API函数能够快捷、方便的解决实际问题,而这往往是只使用.Net FrameWork SDK所望尘莫及的,但随着.Net FrameWork SDK内容的不断丰富,各种新的组成部分和新的功能不断加入,可以预见的是,在未来的.Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章