VB6怎么调用API函数(高分)

2024-12-04 20:33:14
推荐回答(2个)
回答(1):

编写使用了API的程序,建议你准备好3份资料(网上都可以下载到):

1。MSDN 2。VB API手册 3。win32api.txt

2中有常用函数的说明信息,3中有所有函数的申明格式和常数、结构的参考信息,1是最详细的资料,带有大量信息甚至代码

_ALLOWED_ACE_TYPE = &H0
Const ACCESS_DENIED_ACE_TYPE = &H1
Const ACCESS_SYSTEM_SECURITY = &H1000000

这是普通的常数定义,只不过变量名比较长,
&H表示后面的数为16进制.

这些就是常数 因为windows是 C编写的 其中windows本身 提供很多的函数供windows和用户调用 VB使用的API 大部分是windows本身的dll 当初编写这些dll时 内部的有很多常数 是固定的 比如
Public Const ACCESS_ALLOWED_ACE_TYPE = &H0
Public Const ACCESS_DENIED_ACE_TYPE = &H1
Public Const ACCESS_SYSTEM_SECURITY = &H1000000

回答(2):

Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

这个API简单,作用是让窗体标题闪烁。其实你只要记住:在VB里声明API首先新建一个模块,在模块里声明。

Declare 语句用于在模块级别中声明对动态链接库 (DLL) 中外部过程的引用。对此,你只要记住任何API函数声明都必须写这个语句就可以了。
Iib 指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。
如在上例中,SetFocus Lib "user32"说明 函数 SetFocus 来自 user32.dll文件。主要的dll动态连接库文件有∶
user32.dll Windows管理。生成和管理应用程序的用户接口。

GDI32.dll 图形设备接口。产生Windows设备的图形输出
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

上面的东西你能理解多少算多少,以后使用的过程中逐渐会明白。你只要记住,新建一个模块,在模块里申明API.使用API要有一个好工具,推荐叶帆的API浏览器。有结构先声明结构。要使用的常数也要声明。
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

比如说这个API函数就需要在API函数前先声明一个结构,否则就出错。

Type POINTAPI
x As Long
y As Long
End Type

这个和自定义结构一样的。
然后就上面那个API函数举例说明一下,先新建一个时间控件,把间隔时间设置为1000毫秒(1秒)

然后写代码。

Declare Function FlashWindow Lib "user32" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

我们来看需要设置的参数 1-hwnd 这里是设置窗体的句柄,这里就用me.hwnd.意思就是自身窗体的句柄。
2-bInvert Long,TRUE(非零)表示切换窗口标题;FALSE返回最初状态
然后是函数的返回值,注意是long,你如果需要返回值,就要建立一个long的变量。它的返回值:如窗口在调用前处于活动状态,则返回(非零)

然后在在时间控件的timer事件里写如下代码。(你也可以试试返回值,API跟普通函数一样,有参数,有返回值,当需要有返回值,需要括号。b=FlashWindow (Me.hwnd, True)

FlashWindow Me.hwnd, True

其实API函数非常需要一个好工具,这么多的API函数,结构,常数,没有人能背下来。只有即查即用。