Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.