GetAsyncKeyState 与按住 CTRL 按钮和另一个"toggled"按钮未按预期工作



出于测试目的,我得到了以下代码:

bool test = false;
if (GetAsyncKeyState(VK_LCONTROL) && GetAsyncKeyState(VK_F2) & 1) {
    test = !test;
    std::cout << test << std::endl;
}

现在我希望的是,当我按下左控制键,然后按F2时,说明指令得到了正确处理。问题是,如果我按住LCTRL然后按F2,或者当我按住F2然后按LCTRL,或者当当我按下LCTRL并然后按F2或者当我按下F2然后LCTRL时,条件变为真。因此,无论按下哪个按钮的组合,我都会使用这个条件。

我希望你们中的一些人在某个时候遇到了这一点,并能提供一些非常值得赞赏的见解。

GetAsyncKeyState在其返回值中返回多个内容。检查钥匙是否按下的正确方法是:bool lctrldown = GetAsyncKeyState(VK_LCONTROL) < 0;

也就是说,等待用户按下F2意味着轮询和轮询是糟糕的!如果您只关心自己窗口中的F2,那么您应该在消息循环中使用TranslateAccelerator或处理WM_KEYDOWN

对于全局解决方案,请使用RegisterHotKey或低级键盘挂钩。

WM_KEYDOWN或挂钩的情况下,当您收到关于F2的通知时,您应该使用GetAsyncKeyState检查控制键的状态。

最新更新