Freigeben über


LowLevelMouseProc-Funktion

Description

Eine anwendungsdefinierte oder bibliotheksdefinierte Rückruffunktion, die mit der SetWindowsHookExA/SetWindowsHookExW-Funktion verwendet wird. Das System ruft diese Funktion jedes Mal auf, wenn ein neues Mauseingabeereignis in eine Threadeingabewarteschlange gepostet werden soll.

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

LowLevelMouseProc ist ein Platzhalter für den anwendungsdefiniert oder bibliotheksdefinierte Funktionsnamen.

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

Die Parameter

nCode [in]

Typ: int

Ein Code, den die Hook-Prozedur verwendet, um zu bestimmen, wie die Nachricht verarbeitet wird.

Wenn nCode kleiner als 0 ist, muss die Hook-Prozedur die Nachricht ohne weitere Verarbeitung an die CallNextHookEx-Funktion übergeben und den von CallNextHookEx zurückgegebenen Wert zurückgeben.

Dieser Parameter kann einer der folgenden Werte sein:

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

wParam [in]

Typ: WPARAM

Der Bezeichner der Mausnachricht.

Dieser Parameter kann eine der folgenden Meldungen sein: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN oder WM_XBUTTONUP.

lParam [in]

Typ: LPARAM

Ein Zeiger auf eine MSLLHOOKSTRUCT-Struktur .

Rückkehr

Typ: LRESULT

Wenn nCode kleiner als 0 ist, muss die Hook-Prozedur den von CallNextHookEx zurückgegebenen Wert zurückgeben.

Wenn nCode größer oder gleich Null ist und die Hook-Prozedur die Nachricht nicht verarbeitet hat, wird dringend empfohlen, CallNextHookEx aufzurufen und den zurückgegebenen Wert zurückzugeben. Andernfalls erhalten andere Anwendungen, die WH_MOUSE_LL Hooks installiert haben, keine Hook-Benachrichtigungen und verhalten sich möglicherweise falsch als Ergebnis.

Wenn die Hook-Prozedur die Nachricht verarbeitet hat, wird möglicherweise ein Wert ungleich Null zurückgegeben, um zu verhindern, dass das System die Nachricht an den Rest der Hookkette oder die Zielfensterprozedur übergibt.

Bemerkungen

Eine Anwendung installiert die Hook-Prozedur, indem sie den WH_MOUSE_LL Hook-Typ und einen Zeiger auf die Hook-Prozedur in einem Aufruf der SetWindowsHookExA/SetWindowsHookExW-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 Mauseingabe kann vom lokalen Maustreiber oder von Aufrufen der mouse_event-Funktion stammen. Wenn die Eingabe von einem Aufruf von mouse_event stammt, wurde die Eingabe "injiziert". Der WH_MOUSE_LL Hook wird jedoch nicht in einen anderen Prozess eingefügt. Stattdessen wechselt der Kontext zurück zu dem Prozess, der den Hook installiert hat und in seinem ursprünglichen Kontext aufgerufen wird. Anschließend wechselt der Kontext zurück zur Anwendung, die das Ereignis generiert hat.

Die Hook-Prozedur sollte eine Nachricht in kürzerer Zeit verarbeiten als die im LowLevelHooksTimeout-Wert im folgenden Registrierungsschlüssel angegebene Dateneingabe:

HKEY_CURRENT_USER\Control Panel\Desktop

Der Wert ist in Millisekunden angegeben. Wenn das Hook-Verfahren ausläuft, übergibt das System die Nachricht an den nächsten Hook. Unter Windows 7 und höher wird der Hook jedoch unbeaufsichtigt entfernt, ohne aufgerufen zu werden. Es gibt keine Möglichkeit für die Anwendung zu wissen, ob der Haken entfernt wird.

Windows 10, Version 1709 und höher Der maximal zulässige Timeoutwert des Systems beträgt 1000 Millisekunden (1 Sekunde). Das System verwendet standardmäßig ein Timeout von 1000 Millisekunden, wenn der LowLevelHooksTimeout-Wert auf einen Wert festgelegt ist, der größer als 1000 ist.

Hinweis

Debug-Hooks können diese Art von Low-Level-Maushaken nicht nachverfolgen. Wenn die Anwendung Hooks auf niedriger Ebene verwenden muss, sollte sie die Hooks auf 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 rohe Eingaben überwachen. Dies liegt daran, dass rohe Eingaben Maus- und Tastaturmeldungen asynchron überwachen können, die für andere Threads effektiver sind als Hooks auf niedriger Ebene. Weitere Informationen zu unformatierten Eingaben finden Sie unter "Roheingabe".

Siehe auch

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Hooks

Informationen zu Hooks