我很难理解get键盘状态是如何工作的。我最后一个问题的答案是如此的好,但我不能把它当回事。
Trying to capture key press while sub running ( for snake game ) VBA
我已经声明了这个函数(并且使用了PTRSAFE ),但是我看不出下面的代码是如何使用的。我试过做一支潜艇,但我不明白应该发生什么,所以有人能给我解释一下吗?
我可以看到它检查从0到255,但不知道它与获取状态的函数有什么关系?
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
发布于 2014-05-19 20:01:45
如果按下256个虚拟键中的任何一个,则不是0。如果不是0,则退出潜艇,中止其余的移动。然后,Windows将以正常的方式发送到窗口的密钥,而您的程序将正常地对待它。
您必须运行for循环,无论何时您可能想要中止其余的移动。
GetKeyboardState函数
GetKeyboardState函数将256个虚拟键的状态复制到指定的缓冲区。
语法
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键的状态,而不区分左键和右键。应用程序还可以使用下列虚拟键代码常量作为索引来区分这些键的左实例和右实例:
VK_LSHIFT
VK_RSHIFT
VK_LCONTROL
VK_RCONTROL
VK_LMENU
VK_RMENU
这些左右区分常量仅通过GetKeyboardState、SetKeyboardState、GetAsyncKeyState、GetKeyState和MapVirtualKey函数才能用于应用程序。
https://stackoverflow.com/questions/23745521
复制相似问题