VB GetAsyncKeyState函数问题,高手进
用GetAsyncKeyState函数判断某个键被按下,第一次返回值为1,可是第二次、第三次·····该怎么判断,百科上查了本人菜鸟看的糊涂,求高手详细解释一下!...
用GetAsyncKeyState函数判断某个键被按下,第一次返回值为1,可是第二次、第三次·····该怎么判断,百科上查了本人菜鸟看的糊涂,求高手详细解释一下!
展开
3个回答
展开全部
GetAsyncKeyState函数返回的是指定虚拟键瞬时的状态值,它有四种返回值:
0 --- 键当前未处于按下状态,而且自上次调用GetAsyncKeyState后改键也未被按过;
1 --- 键当前未处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键曾经被按过;
-32768(即16进制数&H8000) --- 键当前处于按下状态,但在此之前(自上次调用GetAsyncKeyState后)键未被按过;
-32767(即16进制数&H8001) --- 键当前处于按下状态,而且在此之前(自上次调用GetAsyncKeyState后)键也曾经被按过。
也就是说,你只要简单的判断GetAsyncKeyState的返回值是否为0,只要不为0就表示键被按下了。如果想精确点就判断一下返回值的二进制数位第0位或第15位是否为0。
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
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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一次
更多追问追答
追问
啥意思
追答
一般是第一个对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询