Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA GetKeyboardState用法-我无法理解它_Excel_Vba_Keyboard_State - Fatal编程技术网

Excel VBA GetKeyboardState用法-我无法理解它

Excel VBA GetKeyboardState用法-我无法理解它,excel,vba,keyboard,state,Excel,Vba,Keyboard,State,我正在努力理解get键盘状态是如何工作的。我最后一个问题的答案很好,但我不能对此掉以轻心 我已经声明了这个函数(并使用了PTRSAFE),但是我看不到下面的代码是如何使用的。我试过做一个替补,但我不明白应该发生什么,所以有人能给我解释一下吗 我可以看到它从0到255进行检查,但看不到它与获取状态的函数有什么关系 Public Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (pbKeyState A

我正在努力理解get键盘状态是如何工作的。我最后一个问题的答案很好,但我不能对此掉以轻心

我已经声明了这个函数(并使用了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
Public声明函数GetKeyboardState Lib“user32”别名“GetKeyboardState”(pbKeyState作为字节)的长度为
dim keybrdbuff(255)作为字节
对于x=0到255
如果为0keybrdbuff(x),则退出Sub
下一个

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

你必须运行for循环,无论你想在哪里中止其余的移动

GetKeyboardState函数


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

语法

BOOL GetKeyboardState(          PBYTE lpKeyState
);
参数

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

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

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

评论

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

当函数返回时,lpKeyState参数指向的数组的每个成员都包含虚拟密钥的状态数据。如果高阶位为1,则按键向下;否则,它就完了。如果该键是切换键,例如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函数,应用程序才能使用这些左右区分常量