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 |