VB中GetAsyncKeyState函数,得到键盘按键,清除键盘记录!

使用GetAsyncKeyState这个函数时,它得到是键盘上一次按键的键,哪怕上一次按键是在程序运行前。怎么解决让键盘记录清空呢?例:我在Timer事件里用GetAsy... 使用GetAsyncKeyState这个函数时,它得到是键盘上一次按键的键,哪怕上一次按键是在程序运行前。怎么解决让键盘记录清空呢?
例:我在Timer事件里用GetAsyncKeyState来判断键盘是不是按下空格
private sub timer1_timer
if GetAsyncKeyState(VK_SPACE) then Call 事件A
end sub
但在我运行程序这前,最后一次按下的是空格,在运行程序后,我没有按任何键,却调用了事件A。求清除键盘记录!

另:有没有更好的函数,可以判断键盘类似于Form_KeyUp事件能判断键盘松开事件?
展开
 我来答
网海1书生
科技发烧友

2012-04-15 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26231

向TA提问 私信TA
展开全部
你不要简单地检测GetAsyncKeyState的返回值是否非零,因为如果在这个函数运行前指定的键已经被按过,则这个函数的返回值的位0为1;如果这个键目前处于按下状态,则位15为1。所以你检测位15是否为1就可以知道这个键是曾经被按过还是正在被按着:

If (GetAsyncKeyState(VK_SPACE) And &H8000) = &H8000 Then Call 事件A

还有一个API函数GetKeyState是只检测按键的当前状态的,但仍然要检测位15是否为1(位0为1表示开关键打开,即CapsLock、NumLock、ScrollLock键):

If (GetKeyState(VK_SPACE) And &H8000) = &H8000 Then Call 事件A
更多追问追答
追问
我再问一下,为什么Form_KeyUp事件不执行呢?、
比如 我的代码是
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
msgbox '"ffdkfjadf"
If GetAsyncKeyState(VK_SPACE) Then
Command5_Click
End If

End Sub
运行时,无论我按什么键,他都不执行!为何?
追答
这是因为键盘事件(包括KeyDown、KeyUp、KeyPress)被窗体上的其他具有焦点的控件抢走了,所以窗体本身就无法响应键盘事件了。解决的办法是把窗体的KeyPreview属性设为True:

Private Sub Form_Load()
Me.KeyPreview = True
End Sub

这样窗体就会优先响应键盘事件(其他控件也可以响应,但排在窗体后面)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式