Função RegisterHotKey (winuser.h)

Define uma chave quente em todo o sistema.

Sintaxe

BOOL RegisterHotKey(
  [in, optional] HWND hWnd,
  [in]           int  id,
  [in]           UINT fsModifiers,
  [in]           UINT vk
);

Parâmetros

[in, optional] hWnd

Tipo: HWND

Um identificador para a janela que receberá WM_HOTKEY mensagens geradas pela chave ativa. Se esse parâmetro for NULL, WM_HOTKEY mensagens serão postadas na fila de mensagens do thread de chamada e deverão ser processadas no loop de mensagem.

[in] id

Tipo: int

O identificador da chave quente. Se o parâmetro hWnd for NULL, a chave ativa será associada ao thread atual e não a uma janela específica. Se já existir uma chave ativa com os mesmos parâmetros de hWnd e id, consulte Comentários sobre a ação executada.

[in] fsModifiers

Tipo: UINT

As teclas que devem ser pressionadas em combinação com a tecla especificada pelo parâmetro vk para gerar a mensagem de WM_HOTKEY. O parâmetro fsModifiers pode ser uma combinação dos valores a seguir.

Value significado
MOD_ALT
0x0001
Qualquer chave ALT deve ser mantida pressionada.
MOD_CONTROL
0x0002
Qualquer chave CTRL deve ser mantida pressionada.
MOD_NOREPEAT
0x4000
Altera o comportamento da tecla de acesso para que a repetição automática do teclado não gere várias notificações de tecla de acesso.
Windows Vista: Não há suporte para esse sinalizador.
MOD_SHIFT
0x0004
Qualquer chave SHIFT deve ser mantida pressionada.
MOD_WIN
0x0008
Qualquer chave do WINDOWS deve ser mantida pressionada. Essas chaves são rotuladas com o logotipo do Windows. Os atalhos de teclado que envolvem a tecla WINDOWS são reservados para uso pelo sistema operacional.

[in] vk

Tipo: UINT

O código de chave virtual da chave quente. Consulte de códigos de chave virtual.

Valor de retorno

Tipo: BOOL

Se a função for bem-sucedida, o valor retornado não será zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Essa função falhará se você tentar associar uma chave ativa a uma janela criada por outro thread.

Normalmente, RegisterHotKey também falharão se os pressionamentos de teclas especificados para a chave de acesso já tiverem sido registrados para outra chave frequente. No entanto, algumas teclas de acesso padrão pré-existentes registradas pelo sistema operacional (como PrintScreen, que inicia a ferramenta Snipping) podem ser substituídas por outro registro de chave frequente quando uma das janelas do aplicativo está em primeiro plano.

Observações

Quando uma tecla é pressionada, o sistema procura uma correspondência em relação a todas as teclas ativas. Ao encontrar uma correspondência, o sistema posta a mensagem WM_HOTKEY na fila de mensagens da janela com a qual a chave de acesso está associada. Se a tecla hot não estiver associada a uma janela, a mensagem de WM_HOTKEY será postada no thread associado à tecla hot.

Se já existir uma chave ativa com os mesmos parâmetros de hWnd e id, ela será mantida junto com a nova chave de acesso. O aplicativo deve chamar explicitamente UnregisterHotKey para cancelar o registro da chave quente antiga.

A chave F12 é reservada para uso pelo depurador o tempo todo, portanto, ela não deve ser registrada como uma chave ativa. Mesmo quando você não está depurando um aplicativo, f12 é reservado no caso de um depurador no modo kernel ou um depurador just-in-time é residente.

Um aplicativo deve especificar um valor de ID no intervalo 0x0000 até 0xBFFF. Uma DLL compartilhada deve especificar um valor no intervalo 0xC000 até 0xFFFF (o intervalo retornado pela função GlobalAddAtom). Para evitar conflitos com identificadores de hot-key definidos por outras DLLs compartilhadas, uma DLL deve usar a função GlobalAddAtom para obter o identificador de chave quente.

**Windows Server 2003: **Se uma chave dinâmica já existir com o mesmo hWnd e id parâmetros, ela será substituída pela nova chave dinâmica.

Exemplos

O exemplo a seguir mostra como usar a função RegisterHotKey com o sinalizador MOD_NOREPEAT.

Neste exemplo, a tecla de acesso 'ALT+b' é registrada para o thread principal. Quando a tecla de acesso for pressionada, o thread receberá uma mensagem WM_HOTKEY, que será captada na chamada GetMessage. Como este exemplo usa MOD_ALT com o valor MOD_NOREPEAT para fsModifiers, o thread receberá apenas outra mensagem WM_HOTKEY quando a tecla 'b' for liberada e pressionada novamente enquanto a tecla 'ALT' estiver sendo pressionada para baixo.

#include "stdafx.h"

int _cdecl _tmain (
    int argc, 
    TCHAR *argv[])
{           
    if (RegisterHotKey(
        NULL,
        1,
        MOD_ALT | MOD_NOREPEAT,
        0x42))  //0x42 is 'b'
    {
        _tprintf(_T("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n"));
    }
 
    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0)
    {
        if (msg.message == WM_HOTKEY)
        {
            _tprintf(_T("WM_HOTKEY received\n"));            
        }
    } 
 
    return 0;
}

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows Vista [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows Server 2003 [somente aplicativos da área de trabalho]
da Plataforma de Destino Windows
cabeçalho winuser.h (inclua Windows.h)
biblioteca User32.lib
de DLL User32.dll

Consulte também

GlobalAddAtom

de entrada do teclado

Registrar a chave de acesso para o aplicativo atual (CSRegisterHotkey)

Registrar a chave de acesso para o aplicativo atual (CppRegisterHotkey)

UnregisterHotKey

WM_HOTKEY