Toggling keys / c++
Toggling keys / c++
如果一个键像这样被打开或关闭,我会尝试注册:
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挂钩。