Windows API函数
我们知道VB可以做很多事,但是有些事情,特别是涉及对Windows操作系统的访问,还需要借助Win32 API函数(Microsoft Win32 Application Programming Interface的缩写)。API函数是一组用C语言编写的函数,总共约有一千来个。原本是为C语言编程人员而编写的,但也可以在VB应用程序中调用。
按功能划分,Win32 API函数大致涉及以下几个方面:窗口管理、图形设备接口、系统管理和多媒体技术。Win32 API函数以动态链接库DLL提供给用户,可以在任何语言中调用。DLL在程序运行时装入,随时响应程序的调用,不必在设计时就将文件存放在工程中,这就是动态链接的意思。正因为如此,一个DLL程序可以同时为多个程序所调用。
在VB中引用API函数,需要事先通过Declare函数,声明要引用的DLL文件名称以及相应函数的参量。然后便可像使用VB函数一样使用API函数。
我们看以下类似的声明语句:
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
GetComputerName是API函数名,kernel32是库名。括号中的ByVal lpBuffer As String, nSize As Long就是函数的参量。最后面的Long表示函数返回值的数据类型。本节通过例子说明Win32 API函数的应用。
Windows在创建每个窗体时,都会赋给它一个与众不同的编号,这就是窗体的句柄。 在Windows中,窗体与控件都被看成是窗体(窗口)。窗体的句柄保存在自己的hwnd属性中。
一.GetComputerName
【功能说明】 | |
函数用于获得计算机的名称 | |
【函数声明】 | |
Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long | |
【返回值】 | |
Long,TRUE(非零)表示成功,否则返回零。会设置GetLastError | |
【参数表】 | |
参数 | 类型及说明 |
lpBuffer | String,参数返回计算机的名称 |
nSize | Long,参数返回lpBuffer参数的字符长度 |
【示例】 | |
Private Sub Command1_Click() Dim name As String, length As Long length = 255 name = String(length, 0) ZYJMod1.GetComputerName name, length '通过函数测得的电脑名称存放在变量Name中 name = Left(name, length) Label1.Caption = name End Sub | |
二、GetCursorPos
【功能说明】 | |
函数返回鼠标指针的当前位置 | |
【函数声明】 | |
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long | |
【返回值】 | |
Long,非零表示成功,零表示失败。会设置GetLastError | |
【参数表】 | |
参数 | 类型及说明 |
lpPoint | POINTAPI,参数返回鼠标的x,y位置坐标。 |
【示例】 | |
Private Sub Command1_Click() Dim point As POINTAPI GetCursorPos point '通过函数获得鼠标的x,y位置坐标存放在变量point MsgBox "(x,y)=(" & point.x & "," & point.y & ")", , "鼠标位置" End Sub | |
三、GetWindowsDirectory
【功能说明】 | |
函数能获取Windows目录的完整路径名。 | |
【函数声明】 | |
Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long | |
【返回值】 | |
Long,实际存入lpBuffer缓冲区的字符数目,如lpBuffer不够大,不能容下文件名,则返回值为实际要求的缓冲区长度。零表示失败。 | |
【参数表】 | |
参数 | 类型及说明 |
lpBuffer | String,指定一个缓冲存储器,用于存放Windows目录名。 |
nSize | Long,参数是这个缓冲存储器的大小 |
【示例】 | |
Sub getwindowsdirectory_test() Dim s As String, length As Long s = String(MAX_PATH, 0) length = GetWindowsDirectory(s, MAX_PATH) s = Left(s, InStr(s, Chr(0)) - 1) MsgBox "Windows路径=" & s, , "GetWindowsDirectory" End Sub | |
Windows API函数
四、ClipCursor
【功能说明】 | |
将指针限制到指定区域。 | |
【函数声明】 | |
Public Declare Function ClipCursor Lib "user32" Alias "ClipCursor" (lpRect As Any) As Long | |
【返回值】 | |
Long,非零表示成功,零表示失败。会设置GetLastError | |
【参数表】 | |
参数 | 类型及说明 |
lpRect | 指定一个矩形,用像素屏幕坐标系统表示。鼠标指针必须在这个区域内运动。可用它传递一个0,禁止指针剪切,恢复常规运作状态 |
【示例】 | |
Private Sub Command1_Click() Dim r As RECT r.Left = 0: r.Top = 0 r.Right = 320: r.Bottom = 200 ClipCursor r End Sub enum函数Private Sub Command2_Click() ClipCursor 0 End Sub | |
五、GetProfileInt
【功能说明】 | |
取得win.ini初始化文件中指定条目的一个整数值 | |
【函数声明】 | |
Public Declare Function GetProfileInt Lib "kernel32" Alias "GetProfileIntA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal nDefault As Long) As Long | |
【返回值】 | |
Long,到条目的值;如指定的条目未到,就返回默认值。如到的数字不是一个合法的整数,函数就会返回其中合法的一部分。例如,对于“xyz=55zz”这个条目,函数会返回55。这个函数也能理解采用标准C语言格式的十六进制数字:用0x作为一个十六进制数字的前缀——所以0x55ab等价于vb的&H55AB | |
【参数表】 | |
参数 | 类型及说明 |
lpAppName | String,欲在其中搜索条目的小节名。这个字串不区分大小写 |
lpKeyName | String,欲获取的项名或条目名。这个字串不区分大小写 |
nDefault | Long,指定在条目未到时返回的默认值 |
【示例】 | |
Private Sub Command1_Click() Dim speed As Long speed = GetProfileInt("Windows", "DoubleClickSpeed", 0) MsgBox "[windows]" & vbCrLf & "DoubleClickSpeed=" & speed, , "GetProfileInt" End Sub | |
六、GetProfileString
【功能说明】 | |
取得win.ini初始化文件中指定条目的一个字符串值 | |
【函数声明】 | |
Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long | |
【返回值】 | |
Long,复制到lpReturnedString缓冲区的字节数量,其中不包括那些NULL中止字符。如lpReturnedString缓冲区不够大,不能容下全部信息,就返回nSize-1(若lpAppName或lpKeyName为NULL,则返回nSize-2) | |
【参数表】 | |
参数 | 类型及说明 |
lpAppName | String,要在其中查条目的小节名。这个字串不区分大小写。如果为vbNullString,则在lpReturnedString缓冲区装载这个.ini文件的所有小节的一个列表 |
lpKeyName | String,欲获取的项名或条目名。这个字串不区分大小写。如果为vbNullString,则在lpReturnedString缓冲区装载指定小节内所有项的一个列表 |
lpDefault | String,指定条目未到时返回的默认值。可设为空("") |
lpReturnedString | String,指定一个预先初始化好的字串缓冲区,长度至少为nSize个字符 |
nSize | Long,装载到lpReturnedString缓冲区的最大字符数 |
【示例】 | |
Private Sub Command1_Click() Dim S As String, length As Long S = String(1024, 0) length = GetProfileString("windows", "programs", "", S, Len(S)) S = Left(S, length) List1.Clear List1.AddItem "programs=" & S End Sub | |
七、Polygon
【功能说明】 | |
描绘一个多边形,由两点或三点的任意系列构成。 | |
【函数声明】 | |
Declare Function Polygon Lib "gdi32" Alias "Polygon" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long | |
【返回值】 | |
Long,非零表示成功,零表示失败。会设置GetLastError | |
【参数表】 | |
参数 | 类型及说明 |
hdc | Long,用于描绘的设备场景 |
lpPoint | 在nCount POINTAPI结构数组中的第一个POINTAPI结构 |
nCount | Long,多边形的总点数(顶点数) |
【示例】 | |
Private Sub Command1_Click() Dim point(0 To 10) As POINTAPI point(0).x = 0: point(0).y = 100 point(1).x = 200: point(1).y = 100 point(2).x = 66: point(2).y = 200 point(3).x = 100: point(3).y = 0 point(4).x = 133: point(4).y = 200 Polygon Me.hdc, point(0), 5 End Sub | |
Windows API函数
八、SendMessage
【功能说明】 | |
函数可以以多种方法来影响控件的操作特性,其方法取决于发送给程序的一个特定参数 | |
【函数声明】 | |
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long | |
【返回值】 | |
Long,由具体的消息决定 | |
【参数表】 | |
参数 | 类型及说明 |
hwnd | Long,指定要接收消息的对象的句柄 |
wMsg | Long,消息的标识符 |
wParam | Long,与消息同时发送的附加信息 |
lParam | Any,与消息同时发送的附加信息 |
【示例】 | |
Public Const EM_SCROLL = &HB5 Public Const SB_PAGEUP = 2 Public Const SB_PAGEDOWN = 3 Private Sub Command1_Click() SendMessage Text1.hwnd, EM_SCROLL, SB_PAGEUP, 0 End Sub Private Sub Command2_Click() SendMessage Text1.hwnd, EM_SCROLL, SB_PAGEDOWN, 0 End Sub | |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论