2

来自 MSDN

如果设置了最高有效位,则键按下,如果设置了最低有效位,则在上一次调用 GetAsyncKeyState 后按下了键。但是,您不应该依赖最后一种行为;[..]

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

在我的程序中,我只对密钥当前所在位置的返回值感兴趣。即,如 msdn 所定义,当设置了最低和最高有效位 (-32767) 时(这就是它现在的工作方式。)。但是,我是否还必须检查 32767 (没有最低 sig. 位的值)以防万一,就像它说的那样,最低有效位被另一个程序截获,或者“不可靠”,无论这意味着什么。

4

2 回答 2

0

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

于 2012-11-26T13:55:12.390 回答
0

嗯,是的,基本上。不过,只检查最重要的位并完全忽略最不重要的位更容易。

我是否还必须检查 32767(没有最小信号位的值)

这是不对的 - 值将是 -32768(假设二进制补码):

1000 0000 0000 0001   -32767
1000 0000 0000 0000   -32768

参见这里;我很奇怪这个值被打包成 a short,但我们开始了。

于 2012-11-25T01:23:58.493 回答