-
VB中API函数的调用
2015-07-28 09:53:18API的英文全称(Application Programming Interface),WIN32 API也就是MicrosoftWindows32位平台的应用程序编程接口,在window操作系统盛行的期间,程序员主要是利用API函数来开发Windows平台下的应用程序当时...1、API函数
API的英文全称(Application Programming Interface),WIN32 API也就是MicrosoftWindows32位平台的应用程序编程接口,在window操作系统盛行的期间,程序员主要是利用API函数来开发Windows平台下的应用程序当时程序员必须熟记很多API函数。随着软件技术的不断发展,在Windows平台上出现了很所可视化编程环境(例如:VB,C,c++等)在这些编程环境中出现很多类和控件,他们代替了API的功能,实际上这些类和控件是封装了API函数集合。它们把常用的API函数的组合在一起成为一个控件或类库,并赋予其方便的使用方法,所以极大的加速了WINDOWS应用程序开发的过程。有了这些控件和类库,程序员便可以把主要精力放在程序整体功能的设计上,而不必过于关注技术细节。它们只提供WINDOWS的一般功能,对于比较复杂和特殊的功能来说,使用类库和控件是非常难以实现的,这时就需要采用API函数来实现。 这也是API函数使用的场合,所以我们对待API函数不必刻意研究每一个函数的用法,那也是不现实的(能用的到的API函数有几千个呢)。API不用去刻意学,只要用到的时候查看API帮助即可。
2、API函数在VB中的查看
开始→所有程序→Microsoft Visual Basic 6.0 中文版→API文本浏览器
出现API文本浏览器对话框,然后点击文件→加载文本文件→WIN32API→选择你所需要的内容
3、API函数解析
<strong><span style="font-size:18px;"></span></strong><pre name="code" class="cpp"><strong><span style="font-size:18px;">Public Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long</span></strong>
Declare 语句:用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。对此,你只要记住任何API函数声明都必须写这个语句就可以了。
Iib: 指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。
如在上例中,SetParent Lib "user32"说明 函数 SetParent 来自 user32.dll文件。主要的dll动态连接库文件有∶
(1)user32.dll Windows管理。生成和管理应用程序的用户接口。
(2)GDI32.dll 图形设备接口。产生Windows设备的图形输出
(3)Kernel32.dll 系统服务。访问操作系统的计算机资源。
注意,当DLL文件不在Windows或System文件夹中的时候,必须在函数中说明其出处(路径)。如,SetFocus Lib "c:\Mydll\user32"函数声明中的Alias 是可选的。表示将被调用的过程在动态链接库 (DLL) 中还有另外的名称(别名)。如,Alias "SetFocus" ,说明SetFocus函数在User32.dll中的另外一个名称是,SetFocus。怎么两个名都一样呢?当然,也可以是不同的。在很多情况下,Alias说明的函数名,即别名最后一个字符经常是字符A,如SetWindowsText函数的另一个名称是SetWindowsTextA,表示为Alias "SetWindowsTextA"。这个A只不过是设计家们的习惯的命名约定,表示函数属于ANSI版本。别名的用途:从理论上讲,别名提供了用另一个名字调用API的函数方法。如果你指明了别名,那么 尽管我们按Declare语句后面的函数来调用该函数,但在函数的实际调用上是以别名作为首要选择的。如,以下两个函数(Function,ABCD)声明都是有效的,他们调用的是同一个 SetFocus函数∶
Declare Function SetFocus Lib "user32" "SetFocus" (ByVal hwnd As Long) As Long
Declare ABCD SetFocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long需要注意的是,选用Alias的时候,应注意别名的大小写;如果不选用Alias 时的时候,函数名必须注意大小写,而且不能改动。当然,在很多情况下,由于函数声明是直接从API文本游览器中拷贝过来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。
byval的作用:这跟VB的参数传递方式有关,在默认情况下VB是通过地址传递方式传递函数的参数、而有些API函数要求必须采用传值方式来传递函数参数(这两种参数传递方式是不同的,前者传递的是一个指针,而后者要求是参数真实的值)。这样就会发生错误,解决的办法是在API函数参数声明的前面加上ByVal关键字,这样VB就采用传值方式传递参数了。
最后提醒一句,API声明(包括结构、常数)必须放在窗体或模块的"通用(General Declarations)段。
-
VB.NET 等待 延时函数
2009-09-08 10:01:00VB.NET 等待 延时函数Threading.Thread.Sleep(3000) Application.DoEvents()Sleep(3000)也就是说3秒内什么也不能做。 (不知道多线程可以不)。 Windows.Forms.Application.DoEvents()这个函数是是放弃程序的控制权...VB.NET 等待 延时函数
Threading.Thread.Sleep(3000)
Application.DoEvents()
Sleep(3000)也就是说3秒内什么也不能做。
(不知道多线程可以不)。
Windows.Forms.Application.DoEvents()这个函数是是放弃程序的控制权。一般在循环中加入DoEvents,目的是为了给用户一个取消的机会,所以应该有个公用变量作为用户中断标志,并在DoEvents后进行判断,是否退出Do循环。
Protected Sub WaitingSeconds(ByVal seconds As Integer)
Dim tmpNow As Date = Now
While Now.Subtract(tmpNow).Seconds < seconds
Windows.Forms.Application.DoEvents()
End While
End Sub转载于:https://www.cnblogs.com/lwl0606/archive/2009/09/08/1562299.html
-
在asp.net中如何防止二重启动,相当于VB中函数App.PrevInstance的功能
2006-01-16 17:03:00如题,这个功能要运用于asp.net 的 WebApplication的开发中。 转载于:https://www.cnblogs.com/trueben/archive/2006/01/16/318383.html如题,这个功能要运用于asp.net 的 WebApplication的开发中。转载于:https://www.cnblogs.com/trueben/archive/2006/01/16/318383.html
-
vb.net编程中调用Window AP函数
2007-09-18 16:22:00Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数,这些函数一般都...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
-
EXCEL中使用VB语言写程序,调用函数时参数传递的问题
2018-02-25 10:35:30Application.Onkey"{Enter}","HanShu",使用这个语句实现当在特定单元格按下回车键时,可以调用模块HanShu,但我现在想要通过这个语句传递参数,比如我想写成Application.Onkey"{Enter}","HanShu(CanShu1,CanShu2)... -
VB中的API详解
2010-03-28 11:24:00Win32 API即为Microsoft 32位平台的应用程序编程接口(Application Programming Interface)。所有在Win32平台上运行的应用程序都可以调用这些函数。 使用Win32 API,应用程序可以充分挖掘Windo -
VB中实现地图操作的方法
2010-04-27 10:13:001. 在VB的Form设计时,加入一个picturebox控件,...2. 执行VB的函数Createobject(“MapInfo.Application”),启动MapInfo。这时MapInfo在后台启动,对用户来说不可见,不会弹出splash窗口3. 调用MapBasic的函数Set Ap -
使用ActiveX实现在VB中调用Matlab
2018-12-17 15:23:51从 Visual Basic .NET 客户端调用 MATLAB 函数 ...Matlab.Application") 下面这个示例通过 COM 接口从 Microsoft® Visual Basic® 客户端应用程序调用用户定义的 MATLAB® 函数 sol... -
VB中使用API操作注册表
2005-12-24 11:03:00使用 Windows API 注册表函数 所谓 API(Application Programing Interface) 是 Windows 提供的一个32位环境下的应用程序编程接口,其中包括了众多的函数,提供了相当丰富的功能。我们在编制应用程序时,可以调用... -
关于Delphi中的application.ProcessMessages问题(处理事件)
2011-03-22 17:28:01关于Delphi中的application....很多资料中提到,Delphi中的application.ProcessMessages相当于VB中的Doevents函数(转让进程控制),可是,在实际应用中,却不是这么回事。例: (VB Code) Private Sub Comma... -
VB.NET编程中调用Windows API
2007-11-03 21:52:00Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数,这些函数一般都比较... -
VB修改Word中的表格元素
2007-11-15 12:53:00工作中遇到了这个问题,技术难度虽然不太大,但是为了方便,写了两个函数,先发上来,供大家以后参考,自己也做个记录。 Dim objWordApp As New Word.Application Dim objWordDoc As New Word.Document objWordApp.... -
C#中函数参数的形参和实参即加ref 或加 out 与全部不加
2011-12-06 19:02:42在VB中有形参和实参这两个概念,我不知道在C#中有没有。 但是在参数前加ref out 或不加,其效果和VB中的形参和实参一样。 一个实例搞定一切 using System; using System.Collections.Generic; using System.... -
利用activeX实现matlab和vb的混合编程-vb_matlab_activeX.rar
2019-08-12 23:26:46在VB中创建ActiveX对象的代码如下: Dim Matlab as Object. Set Matlab = CreateObject Matlab.Application对象主要有3个函数,具体如下: (1) BSTR Execute([in]BSTR Command)方法 接受单一的字符串... -
windows API函数大全
2012-08-02 15:51:43有些事情,特别是涉及对Windows操作系统的访问,还需要借助Win32 API函数(Microsoft Win32 Application Programming Interface的缩写)。...原本是为C语言编程人员而编写的,但也可以在VB应用程序中调用。 -
VBS调用Windows API函数
2017-01-28 21:55:00Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog»程序设计»VBS调用Windows API函数 ...在VB中创建和使用VBS的内置WScript对象? » VBS调用Windows API函数 标签:Excel,Excel.Application,VBS,V... -
VB6.0(第十三课时)
2019-11-05 15:36:42一、API ...(1)静态链接:程序编写时,若需要调用运行函数库中已有的函数,无须在自己的源代码中重写函数库中的函数,只给出函数名和所需要的参数,就可以执行相应的操作。 (2)动态链接:DLL ... -
DLL函数查看器V3.5
2013-07-24 10:10:37* 新增对函数的易语言和VB的函数及结构声明 * 新增查壳功能 * 新增查看PE文件头信息 * 美化窗口界面等 感谢使用山寨版DLL函数查看器,遇到问题请发送邮件 infopet@qq.com 因为以前使用 DLL函数查看器2.0 遇到很多... -
补习基础:API函数
2008-10-22 21:24:00什么是API函数 API(Advanced Programmers Interface,高级程序员接口)(注:API实际是指Application Programming Interface,应用程序编程接口,不过在VB中也可以这么说吧!)是一套用来控制Windows的各个部件(从桌面的... -
VB6.0动态加载ActiveX控件漫谈
2012-09-29 17:13:46---- 在VB6.0中除了原来的Clear、Remove 方法外(很奇怪,为什么微软在VB5.0中 只提供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处), 增加了Add方法,该方法就是用于动态加载控件的: ... -
微软 VB2010 源码包
2013-05-22 02:21:18APICalls:演示调用 Win32 API 函数以枚举和控制进程和窗口,以及查询和更改系统设置 arrays:创建 Integer 和 Object 值的数组,并对数组进行排序和搜索 AutoImplementedPropSample:包含两个具有相似源代码的... -
VB制作ASP组件_阿里西西视频录像
2008-12-27 12:40:216.通过编写上面的代码,我们在vb中编写asp组件实例的环境已经具备了, 下面,我就尝试写两个与asp中基本相类似的函数,也就是说,关键部位就在 这里了,你完全可以把你所有的asp源码封装在这里... 先写个最简单的输出屏幕... -
Excel VBA语句集以及VB脚本语言参考
2009-08-01 09:07:56微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),可以认为VBA是非常流行的应用程序开发语言VASUAL BASIC 的子集.实际上VBA是"寄生于"VB应用程序的版本.VBA和VB的... -
性能测试-函数性能分析篇
2011-10-25 09:17:00在利用ACT(Application Center Test)进行压力测试后,如何对发现性能问题的模块进行定位,发现性能瓶颈所在,这就需要大家了解一个性能分析工具,Rational Test Suite中的Quantify。Quantify是一款面向VB,VC,... -
VBA编程:700多个API函数的详细介绍
2019-03-02 13:09:08该语言于1993年由微软公司开发的的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的宏功能。 -
C# vb.net 分别引用C++编译DLL
2013-01-18 09:48:00\\Form1.Designer.csusing System.Runtime.InteropServices;//引入dll文件中的函数 namespace WindowsApplication20130113{partial class Form1 { [DllImport("CommApi.dll")] private static ext... -
VB封装API的DLL
2008-02-21 15:44:23VisualBasic6.0编写的DLL <br>封装函数过程一览表----按照分类及字母顺序 ◆封装的10个过程,没有返回值◆ 01、AboutAndHelp-----显示帮助信息 02、ExitOs-----------注销、重启和关机 03、Kill...