Freigeben über


JournalPlaybackProc-Funktion

BESCHREIBUNG

Warnung

Journaling Hooks-APIs werden ab Windows 11 nicht mehr unterstützt und werden in einer zukünftigen Version entfernt. Daher wird dringend empfohlen, stattdessen die SendInput TextInput-API aufzurufen.

Eine anwendungsdefinierte oder bibliotheksdefinierte Rückruffunktion, die mit der SetWindowsHookExA-Funktion/SetWindowsHookExW verwendet wird. Die Funktion zeichnet Nachrichten auf, die das System aus der Systemnachrichtenwarteschlange entfernt. Später kann eine Anwendung eine JournalPlaybackProc-Hookprozedur verwenden, um die Nachrichten wiederzugeben.

Hinweis

In der Regel verwendet eine Anwendung diese Funktion, um eine Reihe von Maus- und Tastaturnachrichten wiederzugeben, die zuvor von der JournalRecordProc-Hookprozedur aufgezeichnet wurden. Solange eine JournalPlaybackProc-Hookprozedur installiert ist, sind normale Maus- und Tastatureingaben deaktiviert.

Der HOOKPROC-Typ definiert einen Zeiger auf diese Rückruffunktion. JournalRecordProc ist ein Platzhalter für den anwendungsdefinierte oder bibliotheksdefinierte Funktionsnamen.

LRESULT CALLBACK JournalRecordProc(
  _In_ int    code,
       WPARAM wParam,
  _In_ LPARAM lParam
);

Parameter

Code [in]

Typ: int

Ein Code, mit dem die Hookprozedur bestimmt, wie die Nachricht verarbeitet werden soll.

Wenn der Code kleiner als null ist, muss die Hookprozedur die Nachricht ohne weitere Verarbeitung an die CallNextHookEx-Funktion übergeben und den von CallNextHookEx zurückgegebenen Wert zurückgeben.

Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
HC_GETNEXT 1 Die Hookprozedur muss die aktuelle Maus- oder Tastaturnachricht in die EVENTMSG-Struktur kopieren, auf die der lParam-Parameter verweist.
HC_NOREMOVE 3 Eine Anwendung hat die PeekMessage-Funktion aufgerufen, wobei wRemoveMsg auf PM_NOREMOVE festgelegt ist, was angibt, dass die Nachricht nach der Verarbeitung von PeekMessage nicht aus der Nachrichtenwarteschlange entfernt wird.
HC_NOREMOVE 2 Die Hookprozedur muss das Kopieren der nächsten Maus- oder Tastaturnachricht in die EVENTMSG-Struktur vorbereiten, auf die lParam verweist. Beim Empfang des HC_GETNEXT Codes muss die Hookprozedur die Nachricht in die -Struktur kopieren.
HC_SYSMODALOFF 5 Ein systemmodales Dialogfeld wurde zerstört. Die Hookprozedur muss die Wiedergabe der Nachrichten fortsetzen.
HC_SYSMODALON 4 Ein systemmodales Dialogfeld wird angezeigt. Bis das Dialogfeld zerstört wird, muss die Hookprozedur die Wiedergabe von Nachrichten beenden.

wParam

Typ: WPARAM

Dieser Parameter wird nicht verwendet.

lParam

Typ: LPARAM

Ein Zeiger auf eine EVENTMSG-Struktur , die eine Nachricht darstellt, die von der Hookprozedur verarbeitet wird. Dieser Parameter ist nur gültig, wenn der CodeparameterHC_GETNEXT ist.

Gibt zurück

Typ: LRESULT

Damit das System vor der Verarbeitung der Nachricht wartet, muss der Rückgabewert die Zeitspanne (in Takttakten) sein, die das System warten soll.

(Dieser Wert kann berechnet werden, indem die Differenz zwischen den Zeitmembern in den aktuellen und vorherigen Eingabemeldungen berechnet wird.)

Um die Nachricht sofort zu verarbeiten, sollte der Rückgabewert null sein. Der Rückgabewert wird nur verwendet, wenn der Hookcode HC_GETNEXT ist. andernfalls wird er ignoriert.

Hinweise

Eine JournalPlaybackProc-Hookprozedur sollte eine Eingabenachricht in den lParam-Parameter kopieren. Die Nachricht muss zuvor mithilfe einer JournalRecordProc-Hookprozedur aufgezeichnet worden sein, die die Nachricht nicht ändern sollte.

Um dieselbe Nachricht immer wieder abzurufen, kann die Hookprozedur mehrmals aufgerufen werden, wobei der Codeparameter auf HC_GETNEXT festgelegt ist, ohne dass ein zwischenzeitlicher Aufruf mit code set auf HC_SKIP erfolgt.

Wenn CodeHC_GETNEXT ist und der Rückgabewert größer als 0 (null) ist, wird das System für die vom Rückgabewert angegebene Anzahl von Millisekunden in den Standbymodus versetzt. Wenn das System fortgesetzt wird, wird die Hookprozedur erneut aufgerufen, wobei der Code auf HC_GETNEXT festgelegt ist, um dieselbe Nachricht abzurufen. Der Rückgabewert dieses neuen Aufrufs von JournalPlaybackProc sollte null sein. Andernfalls wechselt das System für die durch den Rückgabewert angegebene Anzahl von Millisekunden in den Standbymodus, ruft JournalPlaybackProc erneut auf usw. Das System reagiert anscheinend nicht.

Im Gegensatz zu den meisten anderen globalen Hookprozeduren werden die Hookprozeduren JournalRecordProc und JournalPlaybackProc immer im Kontext des Threads aufgerufen, der den Hook festgelegt hat.

Nachdem die Hookprozedur die Steuerung an das System zurückgegeben hat, wird die Nachricht weiterhin verarbeitet. Wenn CodeHC_SKIP ist, muss sich die Hookprozedur darauf vorbereiten, die nächste aufgezeichnete Ereignisnachricht beim nächsten Aufruf zurückzugeben.

Installieren Sie die Hookprozedur JournalPlaybackProc , indem Sie den WH_JOURNALPLAYBACK Typ und einen Zeiger auf die Hookprozedur in einem Aufruf der SetWindowsHookEx-Funktion angeben.

Wenn der Benutzer während der Journalwiedergabe STRG+ESC ODER STRG+ALT+ENTF drückt, beendet das System die Wiedergabe, entbindet die Wiedergabeprozedur des Journals und sendet eine WM_CANCELJOURNAL Meldung an die Journalanwendung.

Wenn die Hookprozedur eine Nachricht im Bereich zurückgibt , der WM_KEYFIRSTWM_KEYLAST, gelten die folgenden Bedingungen:

  • Das paramL-Element der EVENTMSG-Struktur gibt den virtuellen Schlüsselcode der taste an, die gedrückt wurde.
  • Das paramH-Element der EVENTMSG-Struktur gibt den Scancode an.
  • Es gibt keine Möglichkeit, eine Wiederholungsanzahl anzugeben. Das Ereignis wird immer verwendet, um ein Schlüsselereignis darzustellen.

Siehe auch

CallNextHookEx

EVENTMSG

JournalRecordProc

PeekMessage

SetWindowsHookEx

WM_CANCELJOURNAL

Hooks