如何使用GetKeyState按下按键的时刻

时间:2011-02-04 16:33:08

标签: c++ windows

使用GetKeyState,我可以在按下某个键时执行某项任务。但是,如果我有if (GetKeyState(VK_UP) & 0x80),则在保持密钥的整个时间内返回true。

如果我只想按下键的确切时刻(因此if语句的内容不会多次运行),我该如何处理?

2 个答案:

答案 0 :(得分:1)

记住上次循环状态是什么,只有当密钥在之前启动并且现在已关闭时才执行代码。

此外,您似乎通过使用0x80屏蔽结果来检查是否设置了高位,但是SHORT is two bytes。我认为你应该使用0x8000;或者,你可以检查结果是否< 0,因为高位表示有符号整数是否为负。

代码看起来像这样:

bool prevUpKeyState = false;    // false indicates key was up

while (...) {
    // ...

    bool currentUpKeyState = GetKeyState(VK_UP) < 0;
    if ((currentUpKeyState) && (!prevUpKeyState)) {
        // Key just depressed, do stuff
    }

    // ...

    // Update previous key state for next pass through loop:
    prevUpKeyState = currentUpKeyState;
}

答案 1 :(得分:1)

您可以使用bool flag = false并像这样使用它:

if((GetKeyState(VK_UP)&0x80) && ! flag)
{
  flag = true;
}

else if((GetKeyState(VK_DOWN)&0x80) &&  flag)
{
  flag = false;
}

if(flag) //key is just pressed
{
  //TODO: Your handling here
}