gpt4 book ai didi

c++ - 在 C++ 中没有修饰符的 RegisterHotKey

转载 作者:太空宇宙 更新时间:2023-11-04 13:43:21 27 4
gpt4 key购买 nike

这段代码在 Windows 下为 SHIFT+F5 和 SHIFT+F6 注册了 2 个全局热键,它在所有情况下都可以正常工作,包括完全其他应用程序具有焦点的情况,例如游戏。

enum{ KEY_F5 = 1, KEY_F6 = 2 };  
RegisterHotKey(0, KEY_F5, MOD_SHIFT, VK_F5);
RegisterHotKey(0, KEY_F6, MOD_SHIFT, VK_F6);
MSG msg;
while (GetMessage(&msg, 0, 0, 0))
{
PeekMessage(&msg, NULL, 0, 0, 0);
switch (msg.message){

case WM_HOTKEY:
if (msg.wParam == KEY_F5){
// code
}
else if (msg.wParam == KEY_F6){
// code
}
}
}

但是如果我替换

RegisterHotKey(0, KEY_F5, MOD_SHIFT, VK_F5);  
RegisterHotKey(0, KEY_F6, MOD_SHIFT, VK_F6);

通过

RegisterHotKey(0, KEY_F5, 0, VK_F5);  
RegisterHotKey(0, KEY_F6, 0, VK_F6);

因为我的目标是两个都将 F5 和 F6 作为热键,而不必一直按 SHIFT,所以它只有在我的程序获得焦点时才有效,而其他程序没有。我怎样才能实现只有F?就像 TS3 那样的全局热键。即使应用程序没有焦点,它也必须工作。

最佳答案

尝试使用 MOD_NOREPEAT 而不是 MOD_SHIFT。我也没有看到使用“PeakMessage”的任何必要性。由于您已经调用了 GetMessage(),因此 PeakMessage 确实是多余的。

关于c++ - 在 C++ 中没有修饰符的 RegisterHotKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26929928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com