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