5

引用 C++ Windows 环境中的键盘控件时,0x80 代码是什么意思?

例如,

if(GetKeyState('K') & 0x80) { 
    //do something 
}

感谢大家!

4

4 回答 4

8

更新

一连串的反对票促使我进一步调查此事。以下是返回值(十六进制)的GetKeyState工作原理。我不太了解像这样的键的切换属性,k但我假设它有一些默认状态可以切换。

0      Default State, key up
ff80    Default state, key down
1       Toggled, key up
ff81    Toggled, key down

0xff80每当需要设置高位并且低位有意义时,都会添加So。所以现在我们知道了为什么这种0x80方法有效——因为低字节的高位也被设置了!

旧答案

GetKeyState返回一个SHORTwhere 如果高位是1则表示密钥已启动。仅检查该位是否为的按位与运算,因为在二进制中是。0x8010x8010000000

因此,如果返回值的高位为 is且高位为 ,则该语句GetKeyState('K') & 0x80将返回。0x80GetKeyState('K')100

于 2010-04-30T18:41:14.140 回答
3

函数的 MSDN 文档指出:

如果高位为1,则key为down;否则,它就起来了。

按位和 0x80 为您提供高位,if检查结果是零还是非零,本质上检查该位的值。

然而,这个检查看起来像一个错误,因为GetKeyState()返回 aSHORT并且要检查短路的高位,您需要按位和 0x8000。
所以我建议你用调试器检查返回值,并验证它在现实中是如何工作的。

于 2010-04-30T18:41:36.623 回答
2

我认为您的意思是 0x8000,而不是 0x80。如果是这种情况,您应该查阅文档 ( http://msdn.microsoft.com/en-us/library/ms646301(VS.85).aspx ),该文档对 GetKeyState 的返回值有以下说明: -

返回值指定指定虚拟键的状态,如下:

•如果高位为1,则key为down;否则,它就起来了。•如果低位为1,则键被切换。一个键,如 CAPS LOCK 键,如果打开,它会被切换。如果低位为 0,则该键关闭且未切换。切换键时键盘上的切换键指示灯(如果有)将亮起,当键未切换时将熄灭。

据我所知,0x80 没有任何意义

于 2010-04-30T18:41:45.183 回答
1

根据文档

返回值指定指定虚拟键的状态:
如果高位为1,则键为down;否则,它就起来了。
如果低位为 1,则键被切换。一个键,如 CAPS LOCK 键,如果打开,它会被切换。如果低位为 0,则该键处于关闭状态且未切换。切换键时键盘上的切换键指示灯(如果有)将亮起,当键未切换时将熄灭。

也许使用不可切换的键(例如“K”),低位(模棱两可的术语 - 也许它们的意思是 0x0080 ?)和高位(0x8000)位做同样的事情?

于 2010-04-30T18:40:37.823 回答