Camaradas,
O RegisterHotkey e uma função disponibilizada pela plataforma Windows ( API ) que cria uma interação com o objeto passado como parametro no momento que o usuário faz uma combinação de teclas, exemplo: CTRL+X. Resumindo, ele registra um objeto para ser notificado quando uma combinação de teclas é acionada.
| Delphi | | copy code | | ? |
| 1 | {$EXTERNALSYM RegisterHotKey} |
| 2 | function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL; stdcall; |
O 1º parametro é o Handle do objeto que receberá a notificação quando a combinação de teclas selecionada for feita.
O 2º parametro é um indice controlado pelo programador afim de possibilitar mais de um registro de combinação de teclas.
O 3º e o 4º parametro são aonde o programador passa qual a combinação de teclas ele quer monitorar.
Exemplo:
| Delphi | | copy code | | ? |
| 1 | |
| 2 | RegisterHotkey(form1.Handle, 1, MOD_CONTROL or MOD_SHIFT, Byte(Ord('Q'))); |
| 3 | RegisterHotkey(form1.Handle, 2, MOD_CONTROL or MOD_SHIFT, Byte(Ord('A'))); |
| 4 |
Aqui eu registro para o TForm form1 o recebimento da notificação no caso de CTRL+SHIFT+Q e CTRL+SHIFT+A.
Mas ainda falta uma coisa, como já sabemos objetos Windows são notificados através de mensagens ( Message ) então temos que gerenciar a mensagem certa que o Windows utiliza para notificar o objeto quando a combinação de teclas é feita. Essa mensagem é a WM_HOTKEY, uma mensagem que o Delphi já mapeia para você como TWMHotKey, então é só escrever o seguinte código para gerenciar as notificações:
| Delphi | | copy code | | ? |
| 1 | |
| 2 | type |
| 3 | TForm1 = class(TForm) |
| 4 | private |
| 5 | { Private declarations } |
| 6 | public |
| 7 | procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; |
| 8 | end; |
| 9 |
E no procedimento separa através da propriedade HotKey da var Msg
Exemplo:
| Delphi | | copy code | | ? |
| 01 | procedure TForm1.WMHotKey(var Msg: TWMHotKey); |
| 02 | begin |
| 03 | case Msg.HotKey of |
| 04 | 1: begin |
| 05 | // Aqui eu recebi CTRL+SHIFT+Q |
| 06 | end; |
| 07 | 2: begin |
| 08 | // Aqui eu recebi CTRL+SHIFT+A |
| 09 | end; |
| 10 | end; |
| 11 | end; |
É muito simples a utilização da API RegisterHotkey, outra parte interessante é a possibilidade de desregistrar a notificação, através da contra-API UnRegisterHotkey.
| Delphi | | copy code | | ? |
| 1 | {$EXTERNALSYM UnregisterHotKey} |
| 2 | function UnregisterHotKey(hWnd: HWND; id: Integer): BOOL; stdcall; |
Baseando no nosso exemplo, desregistramos as 2 notificações assim:
| Delphi | | copy code | | ? |
| 1 | |
| 2 | UnRegisterHotkey(Handle, 1); |
| 3 | UnRegisterHotkey(Handle, 2); |
| 4 |
Simples não é?
Qualquer dúvida fique avontade em perguntar.
Abraço a todos
Tags: API, HotKey, Message, RegisterHotkey, UnRegisterHotkey

Oi blz?
Valeu muito : D
No meu joguinho serviu pra fazer meu console de cheat aparecer com ctrl+K;
Muito legal
Opa, blz?
Mto bacana seu site.
Minha dúvida é: tô tentando utilizar o register hotkey mas instruir o delphi a pular para a página seguinte.
Qual seria a instrução correta?
Abraços!
Olá, blz?
Mto boas as explicações.
Mas minha dúvida é:
Preciso utilizar no meu projeto as teclas + O para passar para a página seguinte. Isso acontece umas três vezes durante o projeto.
Mas não estou conseguindo, pois, quando utilizo a primeira vez, e vou utilizar pela segunda, ele volta na página da primeira utilização.
Dá um help aí.
Abraços…
Olá Leandro,
Muito sutíl a pergunta, mas vou tentar responder:
tu deve usar no hotkey:
e no receptor da WM_HOTKEY:
beginSendo que PageControl1 é (pelo que eu entendi da pergunta) seu controlador de página.