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

时间:2010-04-30 18:36:31

标签: c++ windows keyboard keystroke

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

例如,

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

谢谢大家!

4 个答案:

答案 0 :(得分:8)

<强>更新

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

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

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

旧答案

GetKeyState返回SHORT,如果高位为1,则表示密钥已启用。使用0x80的{​​{3}}操作只会检查该位是1,因为二进制0x80中的位是10000000

因此,如果GetKeyState('K') & 0x80返回的值的高位为0x80,则GetKeyState('K')语句将返回1,如果高0则为0订单位为{{1}}。

答案 1 :(得分:3)

MSDN documentation of the function州:

  

如果高位为1,则键为   下;否则,它就结束了。

按位,0x80给出高位,if检查结果是零还是非零,实质上是检查该位的值。

然而,此检查看起来像是一个错误,因为GetKeyState()返回SHORT并检查需要按位的短序的高位和0x8000。 因此,我建议您使用调试器检查返回值,并验证其实际工作原理。

答案 2 :(得分:2)

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

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

•如果高位为1,则键为关闭;否则,它就结束了。 •如果低位为1,则切换键。如果键打开,则会切换一个键,例如CAPS LOCK键。如果低位为0,则键关闭并取消加盖。当键切换时,键盘上的切换键指示灯(如果有)将打开,而当键未被切换时,键将关闭。

0x80并不意味着什么,尽管

答案 3 :(得分:1)

根据the documentation

  

返回值指定指定虚拟键的状态:
   如果高位为1,则键为关闭;否则,它就结束了    如果低位为1,则切换键。如果键被打开,则会切换一个键,例如CAPS LOCK键。如果低位为0,则键关闭并取消加盖。当键切换时,键盘上的切换键指示灯(如果有)将打开,而当键未被切换时,键将关闭。

也许使用不可切换的键(例如'K'),低阶(模糊术语 - 也许它们意味着0x0080?)和高阶(0x8000)位执行相同操作事?