GetAsyncKeyState
VB声明
Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Long) As Integer
说明
判断函数调用时指定虚拟键的状态
返回值
Long,自对GetAsyncKeyState函数的上一次调用以来,如键已被按过,则位0设为1;否则设为0。如键目前处于按下状态,则位15设为1;如抬起,则为0。微软的win32手册指出:倘若输入焦点从属于与调用函数的输入线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函数实际是在整个系统的范围内工作的
参数表
参数 类型及说明
vKey Long,欲测试的虚拟键的键码
注解
如指定了VK_LBUTTON 或 VK_RBUTTON,按钮的状态就会根据实际的按钮报告——无论是否曾用SwapMouseButton函数对鼠标的位置进行了交换。win32提供了额外的一些虚拟键码,比如VK_LSHIFT 和 VK_RSHIFT,以便在两个完全一样的键中区分出左右(也包括Ctrl 和 Alt)
例子
Option Explicit
'在Form1上放两个command,一个textbox(text1.scrollbars设为3,MultiLine设为True)
'
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private blnExit As Boolean
Private Sub Form_Load()
Command1.Caption = "开始"
Command2.Caption = "停止"
blnExit = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
If Not blnExit Then
Cancel = 1
MsgBox "请先停止记录键盘事件!", vbExclamation, "提示"
End If
End Sub
Private Sub Command1_Click()
Dim i As Integer
On Error Resume Next
For i = 1 To 256
GetAsyncKeyState i
Next i
blnExit = False
Do While Not blnExit
For i = &H1 To &H100
If (GetAsyncKeyState(i) And &H7FFF) <> 0 Then
Text1.Text = Text1.Text & i
End If
Next i
DoEvents
Loop
End Sub
Private Sub Command2_Click()
blnExit = True
End Sub