Remarques
Une application installe la procédure de hook en spécifiant le type de hook
WH_MOUSE_LL et un pointeur vers la procédure de hook dans un appel à la fonction
SetWindowsHookEx .
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 hook. Par conséquent, le thread qui a installé le hook doit avoir une boucle de message.
L'entrée de la souris peut provenir du pilote de souris local ou d'appels à la fonction mouse_event . Si l'entrée provient d'un appel à mouse_event , l'entrée a été "injectée". Cependant, le crochet WH_MOUSE_LL n'est pas injecté dans un autre processus. Au lieu de cela, le contexte revient au processus qui a installé le hook 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 \
Panneau de configuration \
Bureau
La valeur est en millisecondes. Si la procédure de hook expire, le système transmet le message au hook suivant. Cependant, sous Windows 7 et versions ultérieures, le hook est supprimé en mode silencieux sans être appelé. L'application n'a aucun moyen de savoir si le crochet est supprimé.
Windows 10 version 1709 et versions ultérieures La valeur de délai d'expiration maximale autorisée par le système est de 1 000 millisecondes (1 seconde). Le système utilisera par défaut un délai d'attente de 1 000 millisecondes si la valeur LowLevelHooksTimeout est définie sur une valeur supérieure à 1 000.
Remarque Les crochets de débogage ne peuvent pas suivre ce type de crochets de souris de bas niveau. Si l'application doit utiliser des crochets de bas niveau, elle doit exécuter les crochets sur un thread dédié qui transmet le travail à un thread de travail, puis revient immédiatement. Dans la plupart des cas où l'application doit utiliser des crochets de bas niveau, elle doit plutôt surveiller l'entrée brute. En effet, l'entrée brute peut surveiller de manière asynchrone les messages de la souris et du 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 .