当前位置:编程学习 > VB >>

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

刚刚开始学API
谁能告诉 我怎么调用API函数(比如怎么声明,都代表什么意思之类的)
并且给几个简单调用API的实例(越简单越好,要带注释的)
答案:
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函数,结构,常数,没有人能背下来。只有即查即用。
1、启动VB62、进入菜单:外接程序--外接程序管理器 单击VB6 API Viewer 勾选“在启动中加载”和“加载/卸载” 按“确定”3、进入菜单:外接程序--API 浏览器 进入API浏览器的菜单:文件--加载文本文件 选择:WIN32API.TXT 进入API浏览器的菜单:文件--转换文本为数据库 保存数据库名为WIN32API.MDB 进入API浏览器的菜单:文件--加载数据库文件 选择:WIN32API.MDB 勾选API浏览器的菜单:视图--加载最后文件 在API类型为“声明”的情况下,“键入你要查找的内容的开头几个字母”下面输入:“winexec“,下面就出现了WinExec这个函数 选择“声明范围”为“私有” 双击“可用项”中出现的WinExec函数 “选定项”中就出现了下面的代码: Private Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long 按“插入”就将这个API函数声明入到了你当前的窗体的“通用”模块中。 4、接下来,你可以在窗体中调用这个API函数了,比如: WinExec "Explorer http://www.zjnu.edu.cn", SW_SHOWMAXIMIZED 这里,SW_SHOWMAXIMIZED是API的一个预定义的常数,你可以在API浏览器中的API类型为“常数”类型中输入 SW_SHOWMAXIMIZED可以发出它实际上的定义为:Private Const SW_SHOWMINIMIZED = 2,你也可以利用这个预定的值直接写到API函数中:WinExec "Explorer http://www.zjnu.edu.cn", 2也是一个道理。但这里,需要在窗体的通用模块中定义这个常量:Private Const SW_SHOWMAXIMIZED = 3这种常量的声明,还是需要在AIP浏览器中生成。方法是:在API浏览器的“API类型”中选择“常数”,在“声明范围”中选择“私有”,在,“键入你要查找的内容的开头几个字母”下面输入“sw_showmaximized”这个常量,在“可用项”中就会出现它,双击这个找到的常量名,按“插入”按钮就把这行定义代码写到窗体的通用模块里去了。参数nCmdShow 的取值有:uCmdShow:定义了以怎样的形式启动程序的常数值,它与ShowWindow函数的 nCmdShow 参数总结的设置相同:uCmdShow Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数 SW_HIDE 隐藏窗口,活动状态给令一个窗口 SW_MINIMIZE 最小化窗口,活动状态给令一个窗口 SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态 SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态 SW_SHOWMAXIMIZED 最大化窗口,并将其激活 SW_SHOWMINIMIZED 最小化窗口,并将其激活 SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口 SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口 SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口 SW_SHOWNORMAL 与SW_RESTORE相同
编写使用了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

上一个:VB怎打包成绿色软件?
下一个:VB浠g爜涓嶆噦锛屽府蹇欑湅涓€涓?- 宸茶В鍐?- 鎼滄悳闂棶

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,