Глобальная горячая клавиша с WIN32 API?

я смог установить локальные горячие клавиши, как это

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

Как я могу установить горячую клавишу для глобального? Я хочу быть там даже когда мое окно скрыто.

4 ответов


Я решил это сам, но спасибо за ваш ответ вот что было не так...

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

Если вы сначала зарегистрируете горячую клавишу, затем скройте окно... по какой-то причине он игнорирует горячую клавишу... Ну что ж.. теперь он работает:)


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

hWnd [in, необязательно]

тип: HWND

<...> Если этот параметр равен NULL, сообщения WM_HOTKEY отправляются в очередь сообщений вызывающего потока и должна быть обработана в цикл обработки сообщений.

Это лучший способ регистрации глобальных горячих клавиш.


Это не имеет значения, если ваше окно видно или нет. Вы не должны использовать hWnd, который вы планируете destory (например, диалог). Создайте отдельное (невидимое) окно, если у вас нет другого подходящего окна.


сначала вы определяете одну или несколько констант для горячих клавиш

#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
             }
         }