我尝试注册一个键是否已打开或关闭,如下所示:
if (pKeyBuffer[VK_TAB] & 0xFF81)
{
functionA();
}
if (pKeyBuffer[VK_TAB] & 1)
{
functionB();
}
但是在上面的代码中存在一个大问题 - VK_TAB的状态在启动时是未知的,因此,有时候,我必须再次在运行时按Tab键将其设置为默认状态。 / p>
我不能使用常规'0xF0'或'0',因为我不能多次调用functionA()
或functionB()
。我需要类似开关的行为(即如果Tab被按下,即使它被按下,
functionA()
仍然只执行一次。)
那么有没有办法获得关键状态信息来执行第一次击键?或者你可以建议一些替代方法?谢谢!
答案 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。