Вопрос

Мне удалось установить локальные горячие клавиши следующим образом

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

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

Это было полезно?

Решение

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

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

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

Другие советы

http://msdn.microsoft.com/ru-RU/library/windows/desktop/ms646309 (v=против 85).aspx

hWnd [вход, необязательно]

Тип:ХВНД

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

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

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

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

#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
             }
         }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top