Глобальная горячая клавиша с 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
}
}