使用GetKeyState()

Cap*_*rog 7 c++ winapi keypress

我希望在按下某个键时有一个布尔事件切换.具体来说,是's'键.我已经指向函数GetKeyState(),它应该在Win32 API下工作.我理解字母's'的ASCII码是115,所以我的代码如下:

if (GetKeyState(115) == 1)
{
<EVENT>
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.为什么?这是MSDN参考:http://msdn.microsoft.com/en-us/library/ms646301%28v=vs.85%29.aspx ..."如果低位为1,则键被切换"

Pio*_*zmo 15

根据我的理解,你需要做的事情:

if( GetKeyState(115) & 0x8000 )
{
    <EVENT>
}
Run Code Online (Sandbox Code Playgroud)

最高位表示是否按下了键.最低值表示是否切换了键(例如,如果打开大写锁定).

  • 字母键的虚拟键码对应于大写字母的 ASCII 码。您甚至可以使用 `char` 代替 `int`,这使代码更具可读性。所以试试`GetKeyState('S')` (2认同)

Sim*_*man 7

由于SHORT已签名,因此高位等于符号位.

因此,要测试是否按下给定键,只需测试返回的值GetKeyState()是否为负数:

if (GetKeyState('S') < 0) {
    // The S key is down.
} else {
    // The S key is up.
}
Run Code Online (Sandbox Code Playgroud)

此外,115是's'的ASCII码.我相信,您应该使用大写案例83来测试'S'键.