VBA的GetKeyboardState使用 – 不能让我的头围绕它

我正在努力了解获取键盘状态如何工作。 关于我最后一个问题的答案是如此之大,但是我只是无法摆脱困境。

尝试捕获按键,而小组运行(蛇游戏)VBA

我已经宣布的function(和使用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 

如果256个虚拟键中的任何一个被按下,那么它不是0.如果不是0,那么它退出该子,中止其余的移动。 Windows会以正常的方式将密钥发送到窗口,您的程序将正常处理它。

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

GetKeyboardState函数


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

句法

 BOOL GetKeyboardState( PBYTE lpKeyState ); 

参数

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

如果函数成功,返回值是非零的。

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

备注

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

当函数返回时,由lpKeyState参数指向的数组的每个成员都包含虚拟键的状态数据。 如果高位为1,则表示closures。 否则,它是起来的。 如果键是一个切换键,例如CAPS LOCK,那么当键被切换时,低位是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函数,这些左侧​​和右侧区分常量才可用于应用程序。