Fonction LowLevelMouseProc
Description
Fonction de rappel définie par l’application ou définie par la bibliothèque utilisée avec la fonction SetWindowsHookExW/SetWindowsHookExW . Le système appelle cette fonction chaque fois qu’un nouvel événement d’entrée de souris est sur le point d’être publié dans une file d’attente d’entrée de thread.
Le type HOOKPROC définit un pointeur vers cette fonction de rappel. LowLevelMouseProc est un espace réservé pour le nom de fonction défini par l’application ou défini par la bibliothèque.
LowLevelMouseProc est un espace réservé pour le nom de fonction défini par l’application ou défini par la bibliothèque.
LRESULT CALLBACK LowLevelMouseProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
Paramètres
nCode [in]
Type : int
Code utilisé par la procédure de raccordement pour déterminer comment traiter le message.
Si nCode est inférieur à zéro, la procédure de raccordement doit transmettre 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 de souris. |
wParam [in]
Type : WPARAM
Identificateur du message de la souris.
Ce paramètre peut être l’un des messages suivants : WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN ou WM_RBUTTONUP.
lParam [in]
Type : LPARAM
Pointeur vers une structure MSLLHOOKSTRUCT .
Retours
Type : LRESULT
Si nCode est inférieur à zéro, la procédure de raccordement doit retourner la valeur retournée par CallNextHookEx.
Si nCode est supérieur ou égal à zéro et que la procédure de raccordement n’a pas traiter le message, il est vivement recommandé d’appeler CallNextHookEx et de retourner la valeur qu’il retourne ; dans le cas contraire, d’autres applications qui ont installé des hooks WH_MOUSE_LL ne recevront pas de notifications de hook et risquent de se comporter de manière incorrecte.
Si la procédure de raccordement a traité le message, elle peut retourner une valeur différente de zéro pour empêcher le système de transmettre le message au reste de la chaîne de raccordement ou à la procédure de fenêtre cible.
Notes
Une application installe la procédure de raccordement en spécifiant le type de hook WH_MOUSE_LL et un pointeur vers la procédure de raccordement 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 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 ». Toutefois, 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 raccordement 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 raccordement expire, le système transmet le message au hook suivant. Toutefois, sur Windows 7 et versions ultérieures, le hook est supprimé silencieusement sans être appelé. Il n’existe aucun moyen pour l’application de savoir si le hook est supprimé.
Windows 10 version 1709 et 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 utilise par défaut un délai d’expiration de 1 000 millisecondes si la valeur LowLevelHooksTimeout est définie sur une valeur supérieure à 1 000.
Notes
Les crochets de débogage ne peuvent pas suivre ce type de crochets de souris 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 hooks 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 souris et clavier 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.