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小时内删除。