vb.net编程中调用Window AP函数

  Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用 软件的开发语言的一些公用的函数,这些函数一般都比较底层,所以当各种开发语言使用自带的函数或类库已无法解决问题时,调用Windows API函数往往是一种非常直接、有效的解决方法。但由于在程序中调用Windows API函数一般都很复杂,所以对于程序员来说,是否能够灵活的使用Windows API函数,往往也是其水平高低的一个重要标志。但自从微软推出.Net框架以后,各种开发基于.Net平台下的程序语言,如Visual Basic .Net、Visual C#等却很少使用Windows API函数,并且微软公司也不像以前那样,提倡在这些.Net开发语言中使用
  
  Windows API函数,其主要的原因如下:

  1. Net框架所附带的类库.Net FrameWork SDK是一个内容丰富、功能强大的软件开发包,各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分。
  
  2.微软Visual Basic .Net、Visual C#等目的是编写跨平台的应用程序,如果在Visual Basic .Net、Visual C#等中使用Windows API函数,这也就注定了编写出的程序只能运行于Windows平台之下,而弱化了.NET的跨平台能力。这也就是为什么微软不提倡在.Net平台调用Windows API函数的原因。
  
  虽然微软并不提倡在Visual Basic .Net、Visual C#中调用Windows API函数,但由于目前.Net 框架推出时间较短,.Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能,所以在某些时候,.Net开发语言还是必须要调用Windows API函数。
  
  一.平台调用、托管DLL、非托管DLL简介:
  托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的,并且扩展名为“DLL”的文件。具体所指就是封装各种命名空间所在的DLL文件,如System.dll等。非托管DLL就是平常所的动态链接库等,其中就包括了封装所有Windows API函数的DLL文件。各种非托管DLL中的函数在公共语言运行库中不能直接被调用,而需要经过.Net框架提供的“平台调用”服务后才可以。
  
  “平台调用”是.Net框架为Visual Basic .Net、Visual C#等.Net开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数)。“平台调用”依赖于元数据在运行时查找导出函数并封装其参数。图01公共语言运行库利用“平台服务”调用非托管DLL中的函数的流程图:
  

图01:“平台服务”的调用非托管函数的流程图


  在托管代码中使用“平台调用”服务调用非托管DLL中封装的函数时,“平台服务”将依次执行以下操作:
  
  1.查找包含该函数所在的DLL文件。
  
  2.如果找到,则将该DLL文件 加载到内存中。
  
  3.查找函数在内存中的地址并将其参数推到堆栈上,并封送所需的数据。
  
  4.将控制权转移给非托管函数。 这样整个函数调用完成。
  
  在Visual Basic .Net中使用“平台调用”服务,申明Windows API函数主要有二种具体的实现方法:
  
  1.使用DllImport特征类来申明Windows API函数。
  
  2.使用“Declare”语句来申明Windows API函数。
  
  这二种方法虽有异曲同工之效,但在繁简上却有很大差异,第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,所以并不提倡。而第二种方法相对简单,并且又保存了以前Visual Basic中的很多语法,所以在平常时大都使用这种方法来申明Windows API函数。
  
  二. vb.net查看文件中图标的函数及申明Windows API的方法:
  Visual Basic .Net要实现查看文件中的图标,目前只使用.Net FrameWork SDK是无法实现这种功能的,正如前面所说,主要是由于.Net FrameWork SDK推出的时间较短,其功能还不可能面面俱到。解决问题的关键是正确使用Windows API函数,其中所涉及到的Windows API函数主要有二个:其一是获得指定文件中的图标数目;其二是从指定文件的指定位置导出图标的Windows句柄。这二个函数都位于“Shell32.dll”文件中,并且函数的入口点都为“ExtractIcon”。下面是在Visual Basic .Net中分别使用DllImport特征类和“Declare”语句申明这二个Windows API函数的具体方法。
  
  (1).使用DllImport特征类来申明Windows API函数:
  
  下面是在Visual Basic .Net中使用DllImport特征类申明二个Windows API函数的具体示例:
  
  '函数ExtractIcon,其功能是是从指定文件的指定位置导出图标的Windows句柄。
< System.Runtime.InteropServices.DllImport (  " Shell32.dll "  , EntryPoint : =   " ExtractIcon "  ) > _
Public   Function _
ExtractIcon ( 
ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function

  '函数Icon_Num,其功能是获得指定文件中的图标数目
< System.Runtime.InteropServices.DllImport (  " Shell32.dll "  , EntryPoint : =   " ExtractIcon "  ) > _
Public   Function _
Icon_Num ( 
ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
End Function

  
  在使用DllImport特征类申明Windows API函数时,如果申明的函数名称和函数的入口点相同,则可以在申明Windows API函数时,省略定义函数入口点对应的代码,即EntryPoint对象字段对应的代码,这样声明ExtractIcon函数的代码也可以简化为如下所示:
  
< 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

  
  (2).使用“Declare”语句来申明Windows API函数:
  
  使用“Declare”语句的确比使用DllImport特征类要简单了许多,下面是在Visual Basic .Net中使用“Declare”语句来声明上述二个Windows API函数的具体方法:
  
  
Declare   Auto   Function ExtractIcon Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
'声明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
'声明Icon_Num函数

  
  在Visual Basic .Net中声明Windows API函数时,“Declare”语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段。同样在使用“Declare”语句声明Windows API函数时,如果声明的函数和函数的入口点相同,也可以省略Alias关键字对应的代码,所以ExtractIcon函数也可以简化为如下:
  
  
Declare   Auto   Function ExtractIcon Lib "Shell32.dll" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
  
  下面就结合一个示例的编写过程来掌握的这二个Windows API函数的具体使用方法,这个示例的作用就是读取指定文件中的图标数目,并显示文件中的图标。
  
  三.本文中程序的编写、调试和运行环境:
  (1).视窗2000高级 服务器版。
  
  (2).Visual Studio .Net 2003企业结构设计版,.Net FrameWork SDK版本号4322。
  
  四.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  

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在VB.Net,DataGridView是一个非常常用的控件,用于显示和编辑数据。为了管理和响应用户与DataGridView的交互,可以使用事件和函数。 DataGridView有许多常用的事件,包括但不限于以下几个: 1. CellClick事件:当用户单击单元格时触发。可以使用事件参数获取单元格的行索引和列索引,进而根据需要进行相应操作。 2. CellValueChanged事件:当单元格的值改变时触发。可以使用事件参数获取单元格的行索引和列索引,并可以通过DataGridView控件的相关属性获取新值和旧值,便于进行后续处理。 3. RowValidating事件:在验证行的数据之前触发。可以使用事件参数获取行索引,并通过判断行的数据是否合法来决定是否允许用户编辑。 4. CellFormatting事件:当单元格的格式需要显示时触发。可以使用事件参数获取单元格的行索引和列索引,并通过编写代码设置特定单元格的样式或者自定义显示格式。 另外,通过编写函数,可以根据需要自定义DataGridView的行为和操作,增强其功能。常见的函数包括但不限于以下几个: 1. 添加数据:可以编写函数将数据添加至DataGridView,可以逐个添加,也可以通过一次添加多个数据。 2. 删除数据:可以编写函数将指定的行或列数据从DataGridView删除。 3. 更新数据:可以编写函数根据特定条件更新DataGridView的数据。 4. 排序和筛选:可以编写函数实现对DataGridView数据的排序和筛选,以便用户更方便地查找和浏览数据。 总之,DataGridView的事件和函数可以完美配合,使我们能够更加灵活地管理和操作这个控件,满足不同的业务需求。 ### 回答2: 在VB.net,DataGridView是一个常用的控件,用于显示和编辑数据。它有很多事件和函数可以用来自定义数据的处理。下面是一些常见的DataGridView事件和函数的介绍: 1. CellClick事件:当用户单击单元格时触发此事件。可以使用此事件来执行特定的操作,例如显示单元格内容、编辑单元格数据等。 2. CellValueChanged事件:当单元格的值发生改变时触发此事件。可以使用此事件来执行特定的操作,例如更新数据库的数据、计算单元格间的关联数据等。 3. RowEnter事件:当用户切换到DataGridView的某一行时触发此事件。可以使用此事件来执行特定的操作,例如显示当前行的详细信息、设置特定行的样式等。 4. SelectionChanged事件:当用户选择DataGridView的单元格或行时触发此事件。可以使用此事件来执行特定的操作,例如获取选行的数据、更新其他相关控件等。 除了这些事件之外,DataGridView还提供了一些常用的函数,例如: 1. Rows.Add()函数:用于向DataGridView添加新的行。 2. Rows.Remove()函数:用于从DataGridView移除指定的行。 3. Columns.Add()函数:用于向DataGridView添加新的列。 4. Columns.Remove()函数:用于从DataGridView移除指定的列。 5. Clear()函数:用于清空DataGridView的所有数据。 总之,在VB.net,我们可以利用这些事件和函数对DataGridView进行灵活的操作,实现不同的功能和交互效果。 ### 回答3: 在VB.NET,DataGridView是一个非常常用的控件,可以用来显示和编辑数据集。它提供了一些常见的事件和函数,用于在操作之前、之和之后执行相关代码。 1. 事件: - CellClick事件:当用户单击单元格时触发,可以通过处理程序来执行相应的操作,比如获取单元格的值、修改单元格的内容等。 - CellValueChanged事件:当单元格的值发生变化时触发,可以用来保存修改后的数据到数据库或触发其他相关操作。 - RowHeaderMouseClick事件:当用户单击行头时触发,可以通过处理程序来执行对整行数据的操作,比如删除、编辑等。 - SelectionChanged事件:当选择的行或单元格发生变化时触发,可以通过处理程序来更新其他控件或执行相关操作。 - DataBindingComplete事件:当数据绑定完成后触发,可以用来对DataGridView进行一些初始化设置或调整。 2. 函数: - AddRow方法:用于向DataGridView添加新行。 - RemoveRow方法:用于删除选定的行。 - UpdateCell方法:用于更新指定单元格的值。 - ClearSelection方法:用于清除选的行或单元格。 - Sort方法:用于对DataGridView的数据进行排序。 - GetCell方法:用于获取指定单元格的值。 通过处理这些事件和调用这些函数,我们可以方便地在DataGridView实现数据的展示、编辑和操作。同时,还可以根据业务需求自定义其他事件和函数,来实现更加复杂的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值