LowLevelKeyboardProc-Funktion

BESCHREIBUNG

Eine anwendungs- oder bibliotheksdefinierte Rückruffunktion, die mit der SetWindowsHookEx-Funktion verwendet wird. Das System ruft diese Funktion jedes Mal auf, wenn ein neues Tastatureingabeereignis in eine Threadeingabewarteschlange gesendet wird.

Hinweis: Wenn diese Rückruffunktion als Reaktion auf eine Änderung des Zustands eines Schlüssels aufgerufen wird, wird die Rückruffunktion aufgerufen, bevor der asynchrone Zustand des Schlüssels aktualisiert wird. Folglich kann der asynchrone Zustand des Schlüssels nicht durch Aufrufen von GetAsyncKeyState aus der Rückruffunktion bestimmt werden.

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

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

Parameter

Code [in]

Typ: int

Ein Code, der von der Hookprozedur verwendet wird, um zu bestimmen, wie die Nachricht verarbeitet wird. Wenn nCode kleiner als 0 (null) ist, muss die Hookprozedur die Nachricht ohne weitere Verarbeitung an die CallNextHookEx-Funktion übergeben und sollte den von CallNextHookEx zurückgegebenen Wert zurückgeben. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
HC_ACTION 0 Die Parameter wParam und lParam enthalten Informationen zu einer Tastaturmeldung.

wParam [in]

Typ: WPARAM

Der Bezeichner der Tastaturmeldung. Dieser Parameter kann eine der folgenden Meldungen sein: WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWNoder WM_SYSKEYUP.

lParam [in]

Typ: LPARAM

Ein Zeiger auf eine KBDLLHOOKSTRUCT-Struktur.

Rückgabe

Typ: LRESULT

Wenn nCode kleiner als 0 (null) ist, muss die Hookprozedur den von CallNextHookEx zurückgegebenen Wert zurückgeben.

Wenn nCode größer oder gleich 0 (null) ist und die Hookprozedur die Nachricht nicht verarbeitet hat, wird dringend empfohlen, CallNextHookEx aufzurufen und den zurückgegebenen Wert zurückzugeben. Andernfalls erhalten andere Anwendungen, die WH_KEYBOARD_LL Hooks installiert haben, keine Hookbenachrichtigungen und verhalten sich daher möglicherweise falsch. Wenn die Hookprozedur die Nachricht verarbeitet hat, wird möglicherweise ein Wert ungleich 0 zurückgegeben, um zu verhindern, dass das System die Nachricht an den Rest der Hookkette oder die Zielfensterprozedur übergibt.

Bemerkungen

Eine Anwendung installiert die Hookprozedur, indem sie den WH_KEYBOARD_LL Hooktyp und einen Zeiger auf die Hookprozedur in einem Aufruf der SetWindowsHookEx-Funktion angibt.

Dieser Hook wird im Kontext des Threads aufgerufen, der ihn installiert hat. Der Aufruf erfolgt durch Senden einer Nachricht an den Thread, der den Hook installiert hat. Daher muss der Thread, der den Hook installiert hat, über eine Meldungsschleife verfügen.

Die Tastatureingabe kann vom lokalen Tastaturtreiber oder von Aufrufen der keybd_event-Funktion stammen. Wenn die Eingabe aus einem Aufruf von keybd_event stammt, wurde die Eingabe "eingefügt". Der WH_KEYBOARD_LL Hook wird jedoch nicht in einen anderen Prozess eingefügt. Stattdessen wechselt der Kontext zurück zum Prozess, der den Hook installiert hat, und wird im ursprünglichen Kontext aufgerufen. Anschließend wechselt der Kontext zurück zur Anwendung, die das Ereignis generiert hat.

Die Hookprozedur sollte eine Nachricht in kürzerer Zeit verarbeiten als der Im LowLevelHooksTimeout-Wert im folgenden Registrierungsschlüssel angegebene Dateneintrag: HKEY_CURRENT_USER\Control Panel\Desktop.

Der Wert ist in Millisekunden angegeben. Wenn für die Hookprozedur ein Zeitspass aufgetreten ist, übergibt das System die Meldung an den nächsten Hook. Ab Windows 7 wird der Hook jedoch automatisch entfernt, ohne aufgerufen zu werden. Es gibt keine Möglichkeit, dass die Anwendung weiß, ob der Hook entfernt wird.

Hinweis: Debughooks können diese Art von Tastaturhooks auf niedriger Ebene nicht nachverfolgen. Wenn die Anwendung Hooks auf niedriger Ebene verwenden muss, sollte sie die Hooks in einem dedizierten Thread ausführen, der die Arbeit an einen Arbeitsthread übergibt und dann sofort zurückgibt. In den meisten Fällen, in denen die Anwendung Hooks auf niedriger Ebene verwenden muss, sollte sie stattdessen unformatierte Eingaben überwachen. Dies liegt daran, dass unformatierte Eingaben Maus- und Tastaturmeldungen, die für andere Threads vorgesehen sind, asynchroner überwachen können, als low level hooks. Weitere Informationen zu unformatierten Eingaben finden Sie unter Raw Input.

Weitere Informationen

CallNextHookEx

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

Hooks

Informationen zu Hooks