Função GetAsyncKeyState (winuser.h)

Determina se uma tecla está para cima ou para baixo no momento em que a função é chamada e se a tecla foi pressionada após uma chamada anterior a GetAsyncKeyState.

Sintaxe

SHORT GetAsyncKeyState(
  [in] int vKey
);

Parâmetros

[in] vKey

Tipo: int

O código de chave virtual. Para obter mais informações, consulte Códigos de chave virtual.

Você pode usar constantes de distinção esquerda e direita para especificar determinadas chaves. Consulte a seção Comentários para obter mais informações.

Valor retornado

Tipo: SHORT

Se a função for bem-sucedida, o valor retornado especificará se a tecla foi pressionada desde a última chamada para GetAsyncKeyState e se a tecla está atualmente para cima ou para baixo. Se o bit mais significativo for definido, a tecla será inativa e, se o bit menos significativo estiver definido, a tecla será pressionada após a chamada anterior para GetAsyncKeyState. No entanto, você não deve confiar nesse último comportamento; para obter mais informações, consulte os Comentários.

O valor retornado é zero para os seguintes casos:

  • A área de trabalho atual não é a área de trabalho ativa
  • O thread em primeiro plano pertence a outro processo e a área de trabalho não permite o gancho ou o registro de diário.

Comentários

A função GetAsyncKeyState funciona com botões do mouse. No entanto, ele verifica o estado dos botões físicos do mouse, não nos botões lógicos do mouse para os quais os botões físicos são mapeados. Por exemplo, a chamada GetAsyncKeyState(VK_LBUTTON) sempre retorna o estado do botão esquerdo do mouse físico, independentemente de ele ser mapeado para o botão lógico esquerdo ou direito do mouse. Você pode determinar o mapeamento atual do sistema de botões físicos do mouse para botões lógicos do mouse chamando GetSystemMetrics(SM_SWAPBUTTON).

que retornará TRUE se os botões do mouse tiverem sido trocados.

Embora o bit menos significativo do valor retornado indique se a tecla foi pressionada desde a última consulta, devido à natureza de multitarefa preemptiva do Windows, outro aplicativo pode chamar GetAsyncKeyState e receber o bit "pressionado recentemente" em vez de seu aplicativo. O comportamento do bit menos significativo do valor retornado é mantido estritamente para compatibilidade com aplicativos windows de 16 bits (que não são preemptivos) e não devem ser confiados.

Você pode usar as constantes de código de chave virtual VK_SHIFT, VK_CONTROL e VK_MENU como valores para o parâmetro vKey . Isso fornece o estado das teclas SHIFT, CTRL ou ALT sem distinguir entre esquerda e direita.

Você pode usar as seguintes constantes de código de chave virtual como valores para vKey para distinguir entre as instâncias esquerda e direita dessas chaves.

Código Significado
VK_LSHIFT Tecla de deslocamento para a esquerda.
VK_RSHIFT Tecla de deslocamento para a direita.
VK_LCONTROL Tecla de controle à esquerda.
VK_RCONTROL Tecla de controle à direita.
VK_LMENU Tecla do menu esquerdo.
VK_RMENU Tecla do menu direito.
 

Essas constantes de distinção esquerda e direita só estão disponíveis quando você chama as funções GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState e MapVirtualKey .

Exemplo

while (GetMessage(&msg, nullptr, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    switch (msg.message)
    {
    case WM_KEYDOWN:
        if ((GetAsyncKeyState(VK_ESCAPE) & 0x01) && bRunning)
        {
            Stop();
        }
        break;
    }
}

Exemplo das Amostras do Windows Classic no GitHub.

Requisitos

   
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll

Confira também