Udostępnij za pośrednictwem


LowLevelMouseProc, funkcja

Opis

Zdefiniowana przez aplikację lub zdefiniowana w bibliotece funkcja wywołania zwrotnego używana z funkcją SetWindowsHookExA/SetWindowsHookExW . System wywołuje tę funkcję za każdym razem, gdy nowe zdarzenie wprowadzania myszy ma zostać opublikowane w kolejce wejściowej wątku.

Typ HOOKPROC definiuje wskaźnik dla tej funkcji wywołania zwrotnego. LowLevelMouseProc jest symbolem zastępczym nazwy funkcji zdefiniowanej przez aplikację lub biblioteki.

LowLevelMouseProc jest symbolem zastępczym nazwy funkcji zdefiniowanej przez aplikację lub biblioteki.

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

Parametry

nCode [in]

Typ: int

Kod używany przez procedurę haka w celu określenia sposobu przetwarzania komunikatu.

Jeśli wartość nCode jest mniejsza niż zero, procedura haka musi przekazać komunikat do funkcji CallNextHookEx bez dalszego przetwarzania i powinna zwrócić wartość zwróconą przez funkcję CallNextHookEx.

Ten parametr może być jedną z następujących wartości.

Wartość Meaning
HC_ACTION 0 Parametry wParam i lParam zawierają informacje o komunikacie myszy.

wParam [in]

Typ: WPARAM

Identyfikator komunikatu myszy.

Ten parametr może być jednym z następujących komunikatów: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN lub WM_XBUTTONUP.

lParam [in]

Typ: LPARAM

Wskaźnik do struktury MSLLHOOKSTRUCT .

Zwraca

Typ: LRESULT

Jeśli wartość nCode jest mniejsza niż zero, procedura haka musi zwrócić wartość zwróconą przez funkcję CallNextHookEx.

Jeśli parametr nCode jest większy lub równy zero, a procedura haka nie przetworzyła komunikatu, zdecydowanie zaleca się wywołanie metody CallNextHookEx i zwrócenie zwracanej wartości; w przeciwnym razie inne aplikacje, które zainstalowały WH_MOUSE_LL haki, nie będą otrzymywać powiadomień o haku i mogą działać nieprawidłowo w wyniku.

Jeśli procedura haka przetworzyła komunikat, może zwrócić wartość niezerową, aby uniemożliwić systemowi przekazanie komunikatu do pozostałej części łańcucha haka lub procedury okna docelowego.

Uwagi

Aplikacja instaluje procedurę haka, określając typ haka WH_MOUSE_LL i wskaźnik do procedury haka w wywołaniu funkcji SetWindowsHookExA/SetWindowsHookExW .

Ten punkt zaczepienia jest wywoływany w kontekście wątku, który go zainstalował. Wywołanie jest wykonywane przez wysłanie komunikatu do wątku, który zainstalował hak. W związku z tym wątek, który zainstalował hak, musi mieć pętlę komunikatu.

Dane wejściowe myszy mogą pochodzić z lokalnego sterownika myszy lub z wywołań do funkcji mouse_event . Jeśli dane wejściowe pochodzą z wywołania do mouse_event, dane wejściowe zostały "wstrzyknięte". Jednak hak WH_MOUSE_LL nie jest wstrzykiwany do innego procesu. Zamiast tego kontekst przełącza się z powrotem do procesu, który zainstalował hak i jest wywoływany w jego oryginalnym kontekście. Następnie kontekst przełącza się z powrotem do aplikacji, która wygenerowała zdarzenie.

Procedura zaczepienia powinna przetwarzać komunikat w krótszym czasie niż wpis danych określony w wartości LowLevelHooksTimeout w następującym kluczu rejestru:

HKEY_CURRENT_USER\Control Panel\Desktop

Wartość jest wyrażona w milisekundach. Jeśli procedura haka przekracza limit czasu, system przekazuje komunikat do następnego haka. Jednak w systemie Windows 7 lub nowszym hak jest dyskretnie usuwany bez wywoływania. Nie ma możliwości, aby aplikacja wiedziała, czy punkt zaczepienia został usunięty.

Windows 10 w wersji 1709 lub nowszej Maksymalna wartość limitu czasu dozwolona przez system to 1000 milisekund (1 sekunda). System będzie domyślnie używać limitu czasu 1000 milisekund, jeśli wartość LowLevelHooksTimeout jest ustawiona na wartość większą niż 1000.

Uwaga / Notatka

Haki debugowania nie mogą śledzić tego typu haków myszy niskiego poziomu. Jeśli aplikacja musi używać punktów zaczepienia niskiego poziomu, należy uruchomić haki na dedykowanym wątku, który przekazuje pracę do wątku roboczego, a następnie natychmiast zwraca. W większości przypadków, gdy aplikacja musi używać punktów zaczepienia niskiego poziomu, powinna zamiast tego monitorować nieprzetworzone dane wejściowe. Jest to spowodowane tym, że nieprzetworzone dane wejściowe mogą asynchronicznie monitorować komunikaty myszy i klawiatury, które są przeznaczone dla innych wątków bardziej efektywnie niż haki niskiego poziomu. Aby uzyskać więcej informacji na temat nieprzetworzonych danych wejściowych, zobacz Nieprzetworzone dane wejściowe.

Zobacz także

CallNextHookEx

mouse_event

KBDLLHOOK, STRUKTURA

MSLLHOOK, STRUKTURA

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Punkty zaczepienia

Informacje o hakach