Toggling keys / c++

Toggling keys / c++

本文关键字:c++ keys Toggling      更新时间:2023-10-16

如果一个键像这样被打开或关闭,我会尝试注册:

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

但在上面的代码中有一个大问题——VK_TAB的状态在启动时是未知的,因此,有时,我不得不在运行时再按一次TAB键,将其设置为默认状态。

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

那么,有什么方法可以获得键状态信息来执行第一次击键吗?或者你可以提出一些替代方法?非常感谢。

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

所以,如果您想检查选项卡是否被按下,请使用GetKeyState(VK_TAB) & 0x8000,如果您想要检查它是否被切换,则使用GetKeyState(VK_TAB) & 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挂钩。