Fonction JournalPlaybackProc
Description
Avertissement
Les API de crochets de journalisation ne sont pas prises en charge à partir de Windows 11 et seront supprimées dans une version ultérieure. Pour cette raison, nous vous recommandons vivement d’appeler l’API SendInput TextInput à la place.
Fonction de rappel définie par l’application ou définie par la bibliothèque utilisée avec la fonction SetWindowsHookExW/SetWindowsHookExW . La fonction enregistre les messages que le système supprime de la file d’attente des messages système. Plus tard, une application peut utiliser une procédure de hook JournalPlaybackProc pour lire les messages.
Notes
En règle générale, une application utilise cette fonction pour lire une série de messages de souris et de clavier enregistrés précédemment par la procédure de hook JournalRecordProc . Tant qu’une procédure de raccordement JournalPlaybackProc est installée, l’entrée normale de la souris et du clavier est désactivée.
Le type HOOKPROC définit un pointeur vers cette fonction de rappel. JournalRecordProc est un espace réservé pour le nom de fonction défini par l’application ou défini par la bibliothèque.
LRESULT CALLBACK JournalRecordProc(
_In_ int code,
WPARAM wParam,
_In_ LPARAM lParam
);
Paramètres
code [in]
Type : int
Code utilisé par la procédure de raccordement pour déterminer comment traiter le message.
Si le code est inférieur à zéro, la procédure de hook 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_GETNEXT 1 | La procédure de raccordement doit copier le message actuel de la souris ou du clavier dans la structure EVENTMSG pointée par le paramètre lParam . |
HC_NOREMOVE 3 | Une application a appelé la fonction PeekMessage avec wRemoveMsg défini sur PM_NOREMOVE, indiquant que le message n’est pas supprimé de la file d’attente des messages après le traitement de PeekMessage . |
HC_NOREMOVE 2 | La procédure de raccordement doit se préparer à copier le message de souris ou de clavier suivant dans la structure EVENTMSG pointée par lParam. Lors de la réception du code HC_GETNEXT , la procédure de raccordement doit copier le message dans la structure. |
HC_SYSMODALOFF 5 | Une boîte de dialogue modale système a été détruite. La procédure de raccordement doit reprendre la lecture des messages. |
HC_SYSMODALON 4 | Une boîte de dialogue modale système s’affiche. Tant que la boîte de dialogue n’est pas détruite, la procédure de raccordement doit cesser de lire les messages. |
wParam
Type : WPARAM
Ce paramètre n'est pas utilisé.
lParam
Type : LPARAM
Pointeur vers une structure EVENTMSG qui représente un message en cours de traitement par la procédure de raccordement. Ce paramètre est valide uniquement lorsque le paramètre de code est HC_GETNEXT.
Retours
Type : LRESULT
Pour que le système attende avant de traiter le message, la valeur de retour doit être la durée pendant laquelle le système doit attendre, en cycles d’horloge.
(Cette valeur peut être calculée en calculant la différence entre les membres de temps dans les messages d’entrée actuels et précédents.)
Pour traiter le message immédiatement, la valeur de retour doit être égale à zéro. La valeur de retour est utilisée uniquement si le code de raccordement est HC_GETNEXT ; sinon, elle est ignorée.
Notes
Une procédure de hook JournalPlaybackProc doit copier un message d’entrée dans le paramètre lParam . Le message doit avoir été enregistré précédemment à l’aide d’une procédure de hook JournalRecordProc , qui ne doit pas modifier le message.
Pour récupérer le même message encore et encore, la procédure de raccordement peut être appelée plusieurs fois avec le paramètre de code défini sur HC_GETNEXT sans appel intermédiaire avec code défini sur HC_SKIP.
Si le code est HC_GETNEXT et que la valeur de retour est supérieure à zéro, le système veille pour le nombre de millisecondes spécifié par la valeur de retour. Lorsque le système continue, il appelle à nouveau la procédure de raccordement avec le code défini sur HC_GETNEXT pour récupérer le même message. La valeur de retour de ce nouvel appel à JournalPlaybackProc doit être égale à zéro ; sinon, le système revient en veille pour le nombre de millisecondes spécifié par la valeur de retour, appelle à nouveau JournalPlaybackProc , et ainsi de suite. Le système semble ne pas répondre.
Contrairement à la plupart des autres procédures de hook globales, les procédures de hook JournalRecordProc et JournalPlaybackProc sont toujours appelées dans le contexte du thread qui définit le hook.
Une fois que la procédure de raccordement a retourné le contrôle au système, le message continue d’être traité. Si le code est HC_SKIP, la procédure de raccordement doit se préparer à retourner le message d’événement enregistré suivant lors de son prochain appel.
Installez la procédure de hook JournalPlaybackProc en spécifiant le type WH_JOURNALPLAYBACK et un pointeur vers la procédure de raccordement dans un appel à la fonction SetWindowsHookEx .
Si l’utilisateur appuie sur Ctrl+Échap ou Ctrl+Alt+Suppr pendant la lecture du journal, le système arrête la lecture, désactive la procédure de lecture de journal et publie un message WM_CANCELJOURNAL dans l’application de journalisation.
Si la procédure de raccordement retourne un message dans la plage WM_KEYFIRST à WM_KEYLAST, les conditions suivantes s’appliquent :
- Le membre paramL de la structure EVENTMSG spécifie le code de clé virtuelle de la touche qui a été enfoncée.
- Le membre paramH de la structure EVENTMSG spécifie le code d’analyse.
- Il n’existe aucun moyen de spécifier un nombre de répétitions. L’événement est toujours considéré comme représentant un événement clé.