Función GetAsyncKeyState (winuser.h)

Determina si una tecla está presionada o no en el momento en el que se llama a la función y si la tecla se ha presionado después de una llamada anterior a GetAsyncKeyState.

Sintaxis

SHORT GetAsyncKeyState(
  [in] int vKey
);

Parámetros

[in] vKey

Tipo: int

Código de clave virtual. Para obtener más información, consulte Códigos de clave virtual.

Puede usar constantes de distinción de izquierda y derecha para especificar determinadas claves. Consulte la sección Comentarios para obtener más información.

Valor devuelto

Tipo: SHORT

Si la función se realiza correctamente, el valor devuelto especifica si la tecla se presionó desde la última llamada a GetAsyncKeyState y si la tecla está activa o inactiva actualmente. Si se establece el bit más significativo, la tecla está inactiva y, si se establece el bit menos significativo, la tecla se presionó después de la llamada anterior a GetAsyncKeyState. Sin embargo, no debe basarse en este último comportamiento; para obtener más información, vea los comentarios.

El valor devuelto es cero para los casos siguientes:

  • El escritorio actual no es el escritorio activo
  • El subproceso en primer plano pertenece a otro proceso y el escritorio no permite el enlace ni el registro del diario.

Comentarios

La función GetAsyncKeyState funciona con botones del mouse. Sin embargo, comprueba el estado de los botones físicos del mouse, no en los botones lógicos del mouse al que se asignan los botones físicos. Por ejemplo, la llamada a GetAsyncKeyState(VK_LBUTTON) siempre devuelve el estado del botón físico izquierdo del mouse, independientemente de si se asigna al botón lógico izquierdo o derecho del mouse. Puede determinar la asignación actual del sistema de botones físicos del mouse a botones lógicos del mouse llamando a GetSystemMetrics(SM_SWAPBUTTON).

que devuelve TRUE si se han intercambiado los botones del mouse.

Aunque el bit menos significativo del valor devuelto indica si la tecla se ha presionado desde la última consulta, debido a la naturaleza de multitarea preferente de Windows, otra aplicación puede llamar a GetAsyncKeyState y recibir el bit "presionado recientemente" en lugar de la aplicación. El comportamiento del bit menos significativo del valor devuelto se conserva estrictamente por motivos de compatibilidad con aplicaciones Windows de 16 bits (que no son preferentes) y no debe basarse en él.

Puede usar las constantes de código de clave virtual VK_SHIFT, VK_CONTROL y VK_MENU como valores para el parámetro vKey . Esto proporciona el estado de las teclas MAYÚS, CTRL o ALT sin distinguir entre izquierda y derecha.

Puede usar las siguientes constantes de código de clave virtual como valores para vKey para distinguir entre las instancias izquierda y derecha de esas claves.

Código Significado
VK_LSHIFT Tecla de desplazamiento a la izquierda.
VK_RSHIFT Tecla de desplazamiento a la derecha.
VK_LCONTROL Tecla de control izquierdo.
VK_RCONTROL Tecla de control derecho.
VK_LMENU Tecla de menú de la izquierda.
VK_RMENU Tecla de menú derecho.
 

Estas constantes de izquierda y derecha solo están disponibles cuando se llama a las funciones GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState y MapVirtualKey .

Ejemplo

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;
    }
}

Ejemplo tomado del directorio Windows Classic Samples de GitHub.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluir Windows.h)
Library User32.lib
Archivo DLL User32.dll

Consulte también