【问题标题】:How to capture CTRL + CTRL key presses in my Win32 application?如何在我的 Win32 应用程序中捕获 CTRL + CTRL 按键?
【发布时间】:2011-01-15 10:12:02
【问题描述】:

我如何捕获用户按 Ctrl 两次(Ctrl + Ctrl)全局。我希望能够隐藏我的应用程序窗口,然后在用户使用类似于 Google 快速搜索框的 CtrlCtrl 按键调用它时使其可见。用户可能将焦点放在不同的窗口上。我查看了 RegisterHotKey,但这似乎是针对 MODIFIERS + character key 的,除非我弄错了。

【问题讨论】:

    标签: c++ keyboard shortcut ctrl registerhotkey


    【解决方案1】:

    要创建这样的热键,请执行以下操作:

    ATOM hotkey = GlobalAddAtom("Your hotkey atom name");
    if(hotkey) RegisterHotKey(hwnd, hotkey, MOD_CONTROL, VK_CONTROL);
    else { ...error... }
    

    然后处理WM_HOTKEY消息:

    case WM_HOTKEY:
        if(wParam == hotkey)
        {
           // CTRL pressed!!!
        }
    break;
    

    我想你自己会发现你需要存储之前是否按下过 CTRL 键。例如,如果它在最后 500 毫秒内被按下一次,而用户再次按下它,您将按下 CTRL+CTRL

    【讨论】:

    • 按键去抖动发生在哪里?
    • 使用 GetDoubleClickTime (msdn.microsoft.com/en-us/library/ms646258(VS.85).aspx) 比使用 500 中的硬编码更好。
    • @Thomas Matthews:我不太明白你的意思,我们这里只需要按下事件,即WM_HOTKEY
    • @Bill:是的,这值得考虑。好主意;)
    • 这两个调用有什么区别? RegisterHotKey(hwnd, 热键, MOD_CONTROL, 0); RegisterHotKey(hwnd, 热键, MOD_CONTROL, VK_CONTROL);据我所见,在第二种情况下,当按住 Control 键或与另一个键(例如 CTRL+空格)组合按下时,我会收到重复的 WM_HOTKEY 消息。在第一种情况下,我只在按下和释放控件时才收到 WM_HOTKEY 消息,而没有任何其他组合键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 2010-11-20
    相关资源
    最近更新 更多