首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA GetKeyboardState的使用-无法使我的头绕过它

VBA GetKeyboardState的使用-无法使我的头绕过它
EN

Stack Overflow用户
提问于 2014-05-19 19:16:46
回答 1查看 2.3K关注 0票数 0

我很难理解get键盘状态是如何工作的。我最后一个问题的答案是如此的好,但我不能把它当回事。

Trying to capture key press while sub running ( for snake game ) VBA

我已经声明了这个函数(并且使用了PTRSAFE ),但是我看不出下面的代码是如何使用的。我试过做一支潜艇,但我不明白应该发生什么,所以有人能给我解释一下吗?

我可以看到它检查从0到255,但不知道它与获取状态的函数有什么关系?

代码语言:javascript
运行
复制
Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState As Byte) As Long

dim keybrdbuff(255) as byte

For x = 0 to 255
    If 0<>keybrdbuff(x) then Exit Sub
Next
EN

回答 1

Stack Overflow用户

发布于 2014-05-19 20:01:45

如果按下256个虚拟键中的任何一个,则不是0。如果不是0,则退出潜艇,中止其余的移动。然后,Windows将以正常的方式发送到窗口的密钥,而您的程序将正常地对待它。

您必须运行for循环,无论何时您可能想要中止其余的移动。

GetKeyboardState函数

GetKeyboardState函数将256个虚拟键的状态复制到指定的缓冲区。

语法

代码语言:javascript
运行
复制
BOOL GetKeyboardState(          PBYTE lpKeyState
);

参数

指向接收每个虚拟键的状态数据的256个字节数组的指针中的lpKeyState。返回值

如果函数成功,则返回值为非零。

如果函数失败,则返回值为零。要获得扩展的错误信息,请调用GetLastError。

备注

应用程序可以调用此函数来检索所有虚拟键的当前状态。当线程从消息队列中删除键盘消息时,状态会发生变化。状态不会随着键盘消息被发送到线程的消息队列而改变,也不会随着键盘消息被发布到其他线程的消息队列或从其他线程的消息队列中检索而改变。(异常:通过AttachThreadInput连接的线程共享相同的键盘状态。)

当函数返回时,lpKeyState参数指向的数组的每个成员都包含虚拟键的状态数据。如果高阶位为1,则键按下;否则为down.如果键是一个切换键,例如大写锁,那么当键被切换时,低阶位是1,如果键是未切换的,则为0。对于非切换键,低阶位是没有意义的。开关键据说在打开时会被切换。键盘上的按键指示灯(如果有的话)将在按键被切换时打开,当键被解压时关闭。

若要检索单个键的状态信息,请使用GetKeyState函数。要检索单个键的当前状态,不管是否从消息队列中检索了相应的键盘消息,请使用GetAsyncKeyState函数。

应用程序可以将虚拟键代码常量VK_SHIFT、VK_CONTROL和VK_MENU用作lpKeyState指向的数组的索引。这提供了SHIFT、CTRL或ALT键的状态,而不区分左键和右键。应用程序还可以使用下列虚拟键代码常量作为索引来区分这些键的左实例和右实例:

代码语言:javascript
运行
复制
VK_LSHIFT 
VK_RSHIFT 
VK_LCONTROL 
VK_RCONTROL 
VK_LMENU 
VK_RMENU 

这些左右区分常量仅通过GetKeyboardState、SetKeyboardState、GetAsyncKeyState、GetKeyState和MapVirtualKey函数才能用于应用程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23745521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档