第1个回答 2013-10-22
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函数,结构,常数,没有人能背下来。只有即查即用。本回答被网友采纳