Partager via


GetAsyncKeyState, fonction (winuser.h)

Détermine si une touche est vers le haut ou le bas au moment où la fonction est appelée, et si la touche a été enfoncée après un appel précédent à GetAsyncKeyState.

Syntaxe

SHORT GetAsyncKeyState(
  [in] int vKey
);

Paramètres

[in] vKey

Type : int

Code de clé virtuelle. Pour plus d’informations, consultez Codes de clé virtuelle.

Vous pouvez utiliser des constantes de gauche et de droite pour spécifier certaines clés. Pour plus d’informations, consultez la section Remarques.

Valeur retournée

Type : SHORT

Si la fonction réussit, la valeur de retour spécifie si la touche a été enfoncée depuis le dernier appel à GetAsyncKeyState et si la touche est actuellement vers le haut ou le bas. Si le bit le plus significatif est défini, la clé est en panne et si le bit le moins significatif est défini, la touche a été enfoncée après l’appel précédent à GetAsyncKeyState. Toutefois, vous ne devez pas vous appuyer sur ce dernier comportement ; pour plus d’informations, consultez les remarques.

La valeur de retour est égale à zéro pour les cas suivants :

  • Le bureau actuel n’est pas le bureau actif
  • Le thread de premier plan appartient à un autre processus et le bureau n’autorise pas le hook ou l’enregistrement journal.

Remarques

La fonction GetAsyncKeyState fonctionne avec des boutons de souris. Toutefois, il vérifie l’état des boutons physiques de la souris, et non sur les boutons logiques de la souris auxquels les boutons physiques sont mappés. Par exemple, l’appel GetAsyncKeyState(VK_LBUTTON) retourne toujours l’état du bouton de la souris physique gauche, qu’il soit mappé au bouton logique gauche ou droit de la souris. Vous pouvez déterminer le mappage actuel du système des boutons de souris physiques aux boutons logiques de la souris en appelant GetSystemMetrics(SM_SWAPBUTTON).

qui retourne TRUE si les boutons de la souris ont été échangés.

Bien que le bit le moins significatif de la valeur de retour indique si la touche a été enfoncée depuis la dernière requête, en raison de la nature multitâche prédéfinie de Windows, une autre application peut appeler GetAsyncKeyState et recevoir le bit « récemment appuyé » au lieu de votre application. Le comportement du bit le moins significatif de la valeur de retour est conservé strictement pour la compatibilité avec les applications Windows 16 bits (qui ne sont pas préemptives) et ne doit pas être utilisé.

Vous pouvez utiliser les constantes de code de clé virtuelle VK_SHIFT, VK_CONTROL et VK_MENU comme valeurs pour le paramètre vKey . Cela donne l’état des touches Maj, Ctrl ou Alt sans distinguer les touches gauche et droite.

Vous pouvez utiliser les constantes de code de clé virtuelle suivantes comme valeurs pour la clé virtuelle pour faire la distinction entre les instances de gauche et de droite de ces clés.

Code Meaning
VK_LSHIFT Touche maj gauche.
VK_RSHIFT Touche maj droite.
VK_LCONTROL Touche de contrôle gauche.
VK_RCONTROL Touche de contrôle de droite.
VK_LMENU Touche de menu de gauche.
VK_RMENU Touche de menu droit.
 

Ces constantes de gauche et de droite sont disponibles uniquement lorsque vous appelez les fonctions GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState et 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;
    }
}

Exemple de exemples Windows Classic sur GitHub.

Spécifications

Requirement Valeur
Client minimum requis Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
plateforme cible Fenêtres
Header winuser.h (include Windows.h)
Library User32.lib
DLL User32.dll

Voir aussi