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

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

hWnd [in, optional]

Тип: HWND

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

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

Ответ 3

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

Ответ 4

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

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