Partager via


Fonction LowLevelKeyboardProc

Description

Fonction de rappel définie par l’application ou définie par la bibliothèque utilisée avec la fonction SetWindowsHookExA/SetWindowsHookExW . Le système appelle cette fonction chaque fois qu’un nouvel événement d’entrée de clavier est sur le point d’être publié dans une file d’attente d’entrée de thread.

Notes

Lorsque cette fonction de rappel est appelée en réponse à une modification de l’état d’une clé, la fonction de rappel est appelée avant la mise à jour de l’état asynchrone de la clé. Par conséquent, l’état asynchrone de la clé ne peut pas être déterminé en appelant GetAsyncKeyState à partir de la fonction de rappel.

Le type HOOKPROC définit un pointeur vers cette fonction de rappel. LowLevelKeyboardProc est un espace réservé pour le nom de fonction défini par l’application ou défini par la bibliothèque.

LRESULT CALLBACK LowLevelKeyboardProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

Paramètres

code [in]

Type : int

Code utilisé par la procédure de hook pour déterminer comment traiter le message.

Si nCode est inférieur à zéro, la procédure de crochet doit passer le message à la fonction CallNextHookEx sans traitement supplémentaire et doit retourner la valeur retournée par CallNextHookEx.

Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
HC_ACTION 0 Les paramètres wParam et lParam contiennent des informations sur un message clavier.

wParam [in]

Type : WPARAM

Identificateur du message clavier.

Ce paramètre peut être l’un des messages suivants : WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN ou WM_SYSKEYUP.

lParam [in]

Type : LPARAM

Pointeur vers une structure KBDLLHOOKSTRUCT .

Retours

Type : LRESULT

Si nCode est inférieur à zéro, la procédure de hook doit retourner la valeur retournée par CallNextHookEx.

Si nCode est supérieur ou égal à zéro et que la procédure de hook n’a pas traité le message, il est vivement recommandé d’appeler CallNextHookEx et de retourner la valeur qu’il retourne ; sinon, d’autres applications qui ont installé WH_KEYBOARD_LL hooks ne recevront pas de notifications de hook et peuvent se comporter de manière incorrecte.

Si la procédure de hook a traité le message, elle peut renvoyer une valeur différente de zéro pour empêcher le système de transmettre le message au reste de la chaîne de crochet ou à la procédure de fenêtre cible.

Notes

Une application installe la procédure de hook en spécifiant le type de hook WH_KEYBOARD_LL et un pointeur vers la procédure de hook dans un appel à la fonction SetWindowsHookExA/SetWindowsHookExW .

Ce hook est appelé dans le contexte du thread qui l’a installé. L’appel est effectué en envoyant un message au thread qui a installé le crochet. Par conséquent, le thread qui a installé le crochet doit avoir une boucle de message.

L’entrée du clavier peut provenir du pilote de clavier local ou des appels à la fonction keybd_event . Si l’entrée provient d’un appel à keybd_event, l’entrée a été « injectée ». Toutefois, le crochet WH_KEYBOARD_LL n’est pas injecté dans un autre processus. Au lieu de cela, le contexte revient au processus qui a installé le crochet et il est appelé dans son contexte d’origine. Ensuite, le contexte revient à l’application qui a généré l’événement.

La procédure de hook doit traiter un message en moins de temps que l’entrée de données spécifiée dans la valeur LowLevelHooksTimeout dans la clé de Registre suivante :

HKEY_CURRENT_USER**\**Control Panel**\**Desktop

Cette valeur est exprimée en millisecondes. Si la procédure de hook expire, le système transmet le message au crochet suivant. Toutefois, sur Windows 7 et versions ultérieures, le crochet est supprimé en mode silencieux sans être appelé. Il n’existe aucun moyen pour l’application de savoir si le crochet est supprimé.

Windows 10 version 1709 et ultérieure La valeur de délai d’expiration maximale autorisée par le système est de 1 000 millisecondes (1 seconde). Le système utilise par défaut un délai d’attente de 1 000 millisecondes si la valeur LowLevelHooksTimeout est définie sur une valeur supérieure à 1000.

Notes

Les crochets de débogage ne peuvent pas suivre ce type de crochets de clavier de bas niveau. Si l’application doit utiliser des hooks de bas niveau, elle doit exécuter les hooks sur un thread dédié qui transmet le travail à un thread de travail, puis retourne immédiatement. Dans la plupart des cas où l’application doit utiliser des crochets de bas niveau, elle doit surveiller l’entrée brute à la place. En effet, l’entrée brute peut surveiller de manière asynchrone les messages de souris et de clavier qui sont ciblés pour d’autres threads plus efficacement que les crochets de bas niveau. Pour plus d’informations sur l’entrée brute, consultez Entrée brute.

Voir aussi

CallNextHookEx

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

Hooks

À propos de Hooks