首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中不带修饰符的RegisterHotKey

c++中不带修饰符的RegisterHotKey
EN

Stack Overflow用户
提问于 2014-11-14 20:21:41
回答 1查看 2.5K关注 0票数 1

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

代码语言:javascript
复制
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
        }
    }
}

但如果我替换掉

代码语言:javascript
复制
RegisterHotKey(0, KEY_F5, MOD_SHIFT, VK_F5);  
RegisterHotKey(0, KEY_F6, MOD_SHIFT, VK_F6);  

通过

代码语言:javascript
复制
RegisterHotKey(0, KEY_F5, 0, VK_F5);  
RegisterHotKey(0, KEY_F6, 0, VK_F6); 

因为我的目标是在不需要总是按SHIFT键的情况下将F5和F6作为热键,只有当我的程序具有焦点而不是其他程序具有焦点时,它才有效。我怎样才能做到只有F?就像TS3这样的全局热键。即使应用程序没有焦点,它也必须工作。

EN

回答 1

Stack Overflow用户

发布于 2015-11-28 12:04:54

尝试使用MOD_NOREPEAT而不是MOD_SHIFT。我也不认为有任何必要使用"PeakMessage“。因为您已经调用了GetMessage(),所以PeakMessage实际上是多余的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26929928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档