GetAsyncKeyState, fonction (winuser.h)
Détermine si une touche est en haut ou en bas au moment où la fonction est appelée, et si la touche a été pressé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 distinction 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 clé est actuellement en haut ou en 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 fier à ce dernier comportement ; Pour plus d’informations, consultez remarques.
La valeur de retour est 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 de journal.
Remarques
La fonction GetAsyncKeyState fonctionne avec les boutons de la souris. Toutefois, il vérifie l’état des boutons physiques de la souris, et non sur les boutons logiques de 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 de la souris logique gauche ou droite. 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éventive de Windows, une autre application peut appeler GetAsyncKeyState et recevoir le bit « récemment appuyé » à la place 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éventives) 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 faire de distinction entre gauche et droite.
Vous pouvez utiliser les constantes de code de clé virtuelle suivantes comme valeurs pour vKey afin de faire la distinction entre les instances gauche et droite de ces clés.
Code | Signification |
---|---|
VK_LSHIFT | Touche maj gauche. |
VK_RSHIFT | Touche maj vers la droite. |
VK_LCONTROL | Touche de contrôle gauche. |
VK_RCONTROL | Touche de contrôle de droite. |
VK_LMENU | Touche de menu gauche. |
VK_RMENU | Touche de menu de droite. |
Ces constantes de distinction de gauche et de droite ne sont disponibles que lorsque vous appelez les fonctions GetKeyboardState, SetKeyboardState, GetAsyncKeyState, GetKeyState et MapVirtualKey .
Exemple
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;
}
}
Exemples classiques Windows sur GitHub.
Configuration requise
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | winuser.h (inclure Windows.h) |
Bibliothèque | User32.lib |
DLL | User32.dll |