Глобальная горячая клавиша с WIN32 API?
-
10-07-2019 - |
Вопрос
Мне удалось установить локальные горячие клавиши следующим образом
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
}
}