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.

Foi útil?

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
             }
         }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top