如果设置了最高有效位,则键为关闭,如果设置了最低有效位,则在上一次调用GetAsyncKeyState之后按下该键。但是,你不应该依赖这最后的行为; [..]
虽然返回值的最低有效位表示自上次查询以来是否按下了键,但由于Windows的先发制人多任务特性,另一个应用程序可以调用GetAsyncKeyState并接收“最近按下”位而不是你的申请。返回值的最低有效位的行为严格保留,以便与16位Windows应用程序(非抢占式)兼容,并且不应该依赖它。
在我的程序中,我只对键当前关闭的返回值感兴趣。也就是说,正如msdn所定义的那样,当最低位和最高位都被设置时(-32767)(这就是它现在正在工作的方式)。但是,我是否还必须检查32767(没有最小sig位的值)如果像它说的那样,最低有效位被另一个程序截获,或者“不可靠”,无论这意味着什么。
答案 0 :(得分:0)
我必须检查32767(没有最小sig位的值)
那不对 - 价值将是-32768(假设有两个补码):
1000 0000 0000 0001 -32767
1000 0000 0000 0000 -32768
另见here;我很奇怪这个值被打包成short
,但我们去了。
答案 1 :(得分:0)
GetAsyncKeyState()
尝试确定自上次调用它以来是否按下了它,这使得它不可靠。其他东西可能已经呼出并有效地重置了那个标志,所以你永远不会收到它。