【发布时间】:2012-11-25 01:13:48
【问题描述】:
如果设置了最高有效位,则按键按下,如果设置了最低有效位,则在上一次调用 GetAsyncKeyState 后按键被按下。但是,您不应该依赖最后一种行为; [..]
虽然返回值的最低有效位指示自上次查询以来是否已按下键,但由于 Windows 的抢占式多任务性质,另一个应用程序可以调用 GetAsyncKeyState 并接收“最近按下”位而不是你的申请。严格保留返回值的最低有效位的行为是为了与 16 位 Windows 应用程序(非抢占式)兼容,不应依赖。
在我的程序中,我只对键当前关闭位置的返回值感兴趣。即,根据 msdn 的定义,当设置了最低和最高有效位 (-32767) 时(这就是它现在的工作方式。)。但是,我是否还必须检查 32767(没有最低 sig. 位的值)以防万一,就像它说的那样,最低有效位被另一个程序截获,或者“不可靠”,无论这意味着什么。
【问题讨论】:
-
注意“最高有效位”。所以只需使用
bool leftShiftDown = GetAsyncKeyState(VK_LSHIFT) < 0;