16

我已经能够像这样设置本地热键

 RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');

如何将热键设置为全局?即使我的窗口被隐藏,我也希望它在那里。

4

4 回答 4

11

我自己解决了,但感谢您的回复,这是出了什么问题...

ShowWindow(hwndDlg, SW_HIDE);
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');

如果您先注册热键然后隐藏窗口...由于某种原因它会忽略热键...哦好吧..它现在可以工作了:)

于 2009-11-30T16:33:38.880 回答
7

http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646309(v=vs.85).aspx

hWnd [输入,可选]

类型:HWND

<...> 如果该参数为NULL,则WM_HOTKEY 消息被投递到调用线程的消息队列中,并且必须在消息循环中进行处理。

这是注册全局热键的更好方法。

于 2013-02-05T07:45:53.557 回答
4

您的窗口是否可见并不重要。您不应该使用计划破坏的 hWnd(如对话框)。如果您没有其他合适的窗口,请创建一个单独的(不可见的)窗口。

于 2009-11-30T16:27:26.723 回答
3

首先,您为热键定义一个或多个常量

#define HOTKEY1 1000
#define HOTKEY2 1002

然后你注册这些热键

RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q

最后,在主事件中,您可以监视这些热键并对其做出响应:

         if (msg.message == HOTKEY1)
         {
             switch (LOWORD(msg.wParam))
             {
             case HOTKEY1:
                 // do such and such
                 break;
             case HOTKEY2:
                 // do such and such
                 break
             }
         }
于 2017-07-08T12:06:05.380 回答