Compartilhar via


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 para 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 de retorno

Tipo: SHORT

Se a função for bem-sucedida, o valor retornado especifica se a tecla foi pressionada desde a última chamada para GetAsyncKeyState e se a chave está atualmente para cima ou para baixo. Se o bit mais significativo for definido, a tecla estará inoperante e, se o bit menos significativo for 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 de primeiro plano pertence a outro processo e a área de trabalho não permite o gancho ou o registro de diário.

Observações

A função GetAsyncKeyState funciona com botões de 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 do mouse físico esquerdo, independentemente de ele ser mapeado para o botão do mouse lógico esquerdo ou direito. 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 "recentemente pressionado" 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 a esquerda e a 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.

Code Meaning
VK_LSHIFT Chave de deslocamento à esquerda.
VK_RSHIFT Chave de deslocamento para a direita.
VK_LCONTROL Chave de controle esquerdo.
VK_RCONTROL Chave de controle à direita.
VK_LMENU Chave 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 .

Example

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 de de Exemplos Clássicos do Windows no GitHub.

Requirements

Requirement Value
Cliente mínimo suportado Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo compatível Windows 2000 Server [somente aplicativos da área de trabalho]
da Plataforma de Destino Windows
Header winuser.h (inclua Windows.h)
Library User32.lib
de DLL User32.dll

Consulte também