0x80代码在引用键盘控件时的含义是什么

Paz*_*Paz 5 c++ windows keyboard keystroke

在C++ Windows环境中引用键盘控件时0x80代码的含义是什么?

例如,

if(GetKeyState('K') & 0x80) { 
    //do something 
}
Run Code Online (Sandbox Code Playgroud)

感谢大家!

Jac*_*cob 8

更新

一连串的downvotes促使我进一步调查这一点.以下是工作的返回值(以十六进制表示)GetKeyState.我没有完全获得键的切换属性,k但我假设有一些默认状态它切换.

0      Default State, key up
ff80    Default state, key down
1       Toggled, key up
ff81    Toggled, key down
Run Code Online (Sandbox Code Playgroud)

所以0xff80加每当高位需要设置和低位有道理.所以现在我们知道为什么这种0x80方法有效 - 因为低位字节的高位也被设置了!

老答案

GetKeyState返回一个SHORT位置,如果高位是,1则表示密钥已启动.该位与与操作0x80只是检查,如果该位是1因为二进制0x8010000000.

因此,声明GetKeyState('K') & 0x80将返回0x80如果返回值的最高位GetKeyState('K')10若高阶位0.


Blu*_*eft 1

根据文档

返回值指定指定虚拟按键的状态:
如果高位为1,则按键按下;否则,就结束了。
如果低位为 1,则按键被切换。诸如 CAPS LOCK 键之类的键在打开时会被切换。如果低位为 0,则该键关闭且未切换。切换键在键盘上的指示灯(如果有)在该键被切换时会亮起,在该键未切换时会熄灭。

也许使用不可切换的密钥(例如“K”),低位(不明确的术语 - 也许它们意味着 0x0080 ?)和高位(0x8000)位会做同样的事情吗?