按住 CTRL 按钮的 GetAsyncKeyState 和另一个 "toggled" 按钮无法正常工作
GetAsyncKeyState with held CTRL button and another "toggled" button not working as wanted
我得到以下代码用于测试:
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
return 在其 return 值中有多个内容。检查按键是否按下的正确方法是:bool lctrldown = GetAsyncKeyState(VK_LCONTROL) < 0;
也就是说,等待用户按 F2 意味着轮询,而轮询是错误的!如果你只关心 F2 在你自己的 window 那么你应该在你的消息循环中使用 TranslateAccelerator
或者处理 WM_KEYDOWN
.
对于全局解决方案,请使用 RegisterHotKey
or a low-level keyboard hook。
在 WM_KEYDOWN
或挂钩的情况下,当您收到有关 F2 的通知时,您应该使用 GetAsyncKeyState
检查控制键的状态.
我得到以下代码用于测试:
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
return 在其 return 值中有多个内容。检查按键是否按下的正确方法是:bool lctrldown = GetAsyncKeyState(VK_LCONTROL) < 0;
也就是说,等待用户按 F2 意味着轮询,而轮询是错误的!如果你只关心 F2 在你自己的 window 那么你应该在你的消息循环中使用 TranslateAccelerator
或者处理 WM_KEYDOWN
.
对于全局解决方案,请使用 RegisterHotKey
or a low-level keyboard hook。
在 WM_KEYDOWN
或挂钩的情况下,当您收到有关 F2 的通知时,您应该使用 GetAsyncKeyState
检查控制键的状态.