GetAsyncKeyState函数返回的是指定虚拟键瞬时的状态值,它有四种返回值:
0 --- 键当前未处于按下状态,而且自上次调用GetAsyncKeyState后改键也未被按过;
1 --- 键当前未处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键曾经被按过;
-32768(即16进制数&H8000) --- 键当前处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键未被按过;
-32767(即16进制数&H8001) --- 键当前处于按下状态,而且在此之前(自上次调用GetAsyncKeyState后)键也曾经被按过。
也就是说,你只要简单的判断GetAsyncKeyState的返回值是否为0,只要不为0就表示键被按下了。如果想精确点就判断一下返回值的二进制数位第0位或第15位是否为0。
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long) As Integer
Private Sub Form_Load()
Timer1.Interval = 50
End Sub
Private Sub Timer1_Timer()
Static n
If GetAsyncKeyState(vbKeyA) < 0 Then '指定一个a键
n = n + 1
Print n
Do Until GetAsyncKeyState(vbKeyA) >= 0 '防止长按一个键
DoEvents
Loop
End If
End Sub
第一次