C++ “是什么意思?”;不应该';“不可依赖”;在GetAsyncKeyState()defn中

C++ “是什么意思?”;不应该';“不可依赖”;在GetAsyncKeyState()defn中,c++,winapi,C++,Winapi,: 如果设置了最高有效位,则按键向下;如果设置了最低有效位,则按键在上一次调用GetAsyncKeyState后按下。然而,你不应该依赖于这最后的行为;[……] 尽管返回值的最低有效位指示自上次查询以来是否已按下该键,但由于Windows的先发制人多任务特性,另一个应用程序可以调用GetAsyncKeyState并接收“最近按下的”位,而不是您的应用程序。返回值最低有效位的行为严格保留,以与16位Windows应用程序(非抢占)兼容,不应依赖 在我的程序中,我只对键当前处于关闭状态时的返回值感兴

:

如果设置了最高有效位,则按键向下;如果设置了最低有效位,则按键在上一次调用GetAsyncKeyState后按下。然而,你不应该依赖于这最后的行为;[……]

尽管返回值的最低有效位指示自上次查询以来是否已按下该键,但由于Windows的先发制人多任务特性,另一个应用程序可以调用GetAsyncKeyState并接收“最近按下的”位,而不是您的应用程序。返回值最低有效位的行为严格保留,以与16位Windows应用程序(非抢占)兼容,不应依赖


在我的程序中,我只对键当前处于关闭状态时的返回值感兴趣。也就是说,根据msdn的定义,当设置了最低和最高有效位(-32767)(这就是它现在的工作方式)。但是,我还必须检查32767(没有最小sig.bit的值),以防,如它所说,最低有效位被另一个程序截获,或者“不可靠”,不管这意味着什么。

嗯,是的,基本上是这样。不过,只检查最高有效位而完全忽略最低有效位更容易

我还必须检查32767(没有最小sig.bit的值)

这是不对的-值将为-32768(假设2的补码):


另见;对我来说很奇怪,这个值被压缩成了一个
短的
,但我们开始了。

GetAsyncKeyState()
尝试确定自上次调用以来是否按下了它,这使得它不可靠。其他的东西可能已经发出,并且有效地重置了该标志,所以你永远不会收到它。

我想知道为什么它也是短的。。由于某些原因,我的代码不再像以前那样工作了。出了点问题。正确的方法是-32767 | |-32768,谢谢你的更正!否则,(例如,仅使用-32768)它的行为似乎与正常的windows按键输入类似,当按住p时,它会执行(p…。p.p.p.p.p.p)而不是(pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp,可转换为
true
:)它现在是
短的
,因为位模式是在
int
short
具有相同大小(16位窗口)的时候定义的。@BoPersson:但是,我认为,很明显,一个字节甚至比这一目的所需的字节大四倍。您完全是向后定义的。注意“最高有效位”。因此只需使用
bool leftShiftDown=GetAsyncKeyState(VK\u LSHIFT)<0;
1000 0000 0000 0001   -32767
1000 0000 0000 0000   -32768