Global Hotkey com API Win32?
-
10-07-2019 - |
Pergunta
Consegui definir teclas de atalho locais como esta
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');
Como posso definir a tecla de atalho para ser global? Eu quero que esteja lá mesmo quando minha janela está escondida.
Solução
Eu mesmo resolvi, mas obrigado pela sua resposta eis o que estava errado ...
ShowWindow(hwndDlg, SW_HIDE);
RegisterHotKey(hwndDlg, 100, MOD_ALT | MOD_CONTROL, 'S');
Se você registrar a tecla de atalho primeiro, esconda a janela ... ela ignora a tecla de atalho por algum motivo ... oh bem .. está funcionando agora :)
Outras dicas
http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms646309(v=vs.85).aspx
hwnd [in, opcional
Tipo: hwnd
<...> Se este parâmetro for nulo, as mensagens WM_HOTKEY serão publicadas na fila de mensagens do thread de chamada e devem ser processadas no loop da mensagem.
Essa é uma maneira melhor de registrar as teclas de atalho globais.
Não importa se sua janela é visível ou não. Você não deve usar um HWND que planeja destorar (como uma caixa de diálogo). Crie uma janela separada (invisível) se você não tiver outra janela adequada.
Primeiro você define uma ou mais constantes para suas teclas de atalho
#define HOTKEY1 1000
#define HOTKEY2 1002
Então você registra estas teclas quentes
RegisterHotKey(NULL, HOTKEY1, MOD_ALT + MOD_SHIFT, 0x53); // ALT+SHIFT+s
RegisterHotKey(NULL, HOTKEY2, MOD_ALT + MOD_SHIFT, 0x51); // ALT+SHIFT+q
Finalmente, no evento principal, você monitore essas teclas de atendimento e responde a elas:
if (msg.message == HOTKEY1)
{
switch (LOWORD(msg.wParam))
{
case HOTKEY1:
// do such and such
break;
case HOTKEY2:
// do such and such
break
}
}