切换键/ c ++

时间:2012-02-26 05:34:47

标签: c++ winapi keyboard

我尝试注册一个键是否已打开或关闭,如下所示:

if (pKeyBuffer[VK_TAB] & 0xFF81)
{
   functionA();
}

if (pKeyBuffer[VK_TAB] & 1)
{
   functionB();
}

但是在上面的代码中存在一个大问题 - VK_TAB的状态在启动时是未知的,因此,有时候,我必须再次在运行时按Tab键将其设置为默认状态。 / p>

我不能使用常规'0xF0'或'0',因为我不能多次调用functionA()functionB()。我需要类似开关的行为(即如果Tab被按下,即使它被按下, functionA()仍然只执行一次。)

那么有没有办法获得关键状态信息来执行第一次击键?或者你可以建议一些替代方法?谢谢!

2 个答案:

答案 0 :(得分:2)

在这种情况下,您想要使用GetKeyState功能,这将在其调用给定密钥时获得按键和按键切换信息。

因此,如果您想检查是否按下了标签,请使用GetKeyState(VK_TAB) & 0x8000,如果您要检查其是否为切换使用GetKeyState(VK_TAB) & 1

答案 1 :(得分:1)

您需要GetAsyncKeyState。定义一个函数:

bool IsKeyDown( int vk )
{
    return (GetAsyncKeyState(VK_TAB) & 0x8000) != 0;
}

并像这样使用:

if( IsKeyDown(VK_TAB) )
{
    // The key is currently down
}
else
{
    // The key is currently up
}

如果要精确捕捉关键状态的变化,则需要使用Windows Hooks