用Python开发输入法后台(4)——关于keystates

在前后台交互的过程中, 消息中会带有keyStates信息, 它是一个形如[0,1,128,129,...]的数组, 代表每一个键的当前状态, 对它的理解和掌握, 有助于对输入法更精细的处理.

 比如输入ctrl+s时, 判断有两个键被按下, 此时s键就不能作为索引词了. 

关于keyStates中数值的含义, 参考网址: https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-getkeyboardstate

里面有一段描述: 如果高阶位为1,则键为 down; 否则为 up。如果键是一个切换键,例如 CAPS LOCK,那么当键被切换时,低阶位为1,而当键未被切换时,低阶位为0。低阶位对于非切换键是没有意义的。切换键在打开时被称为切换键。切换键盘上的指示灯(如果有的话)在切换键的时候是亮的,在不切换键的时候是关闭的。

经过观察, 有如下结论:

- 有很多键的值为1, 其实都没有意义的, 不用理会, 因为低阶位对于非切换键是没有意义的. 

- 有部分键的值为128或者129, 但是这些键是未定义的键, 也不用理会. 键的定义参考: https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

- 有些键代表两个值, 比如ctrl键按下, 可能VK_CONTROL和VK_LCONTROL的最高位都为1

posted @ 2023-05-23 14:37  顺其自然,道法自然  阅读(51)  评论(0编辑  收藏  举报