GetAsyncKeyState()defn中的“不应该依赖”是什么意思

时间:2012-11-25 01:13:49

标签: c++ winapi

From MSDN

  

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

     

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

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

2 个答案:

答案 0 :(得分:0)

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

  

我必须检查32767(没有最小sig位的值)

那不对 - 价值将是-32768(假设有两个补码):

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

另见here;我很奇怪这个值被打包成short,但我们去了。

答案 1 :(得分:0)

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