Бөлісу құралы:


Функция LowLevelMouseProc

Description

Определяемая приложением или библиотека функция обратного вызова, используемая с функцией SetWindowsHookExA/SetWindowsHookExW . Система вызывает эту функцию каждый раз, когда новое событие ввода мыши будет отправляться в очередь ввода потока.

Тип HOOKPROC определяет указатель на эту функцию обратного вызова. LowLevelMouseProc — это заполнитель для имени определяемой приложением или библиотекой функции.

LowLevelMouseProc — это заполнитель для имени определяемой приложением или библиотекой функции.

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

Параметры

nCode [in]

Тип: int

Код процедуры перехватчика используется для определения способа обработки сообщения.

Если nCode меньше нуля, процедура перехватчика должна передать сообщение функции CallNextHookEx без дополнительной обработки и возвращать значение, возвращаемое CallNextHookEx.

Этот параметр может быть одним из следующих значений.

Ценность Значение
HC_ACTION 0 Параметры wParam и lParam содержат сведения о сообщении мыши.

wParam [in]

Тип: WPARAM

Идентификатор сообщения мыши.

Этот параметр может быть одним из следующих сообщений: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_RBUTTONDOWN, WM_RBUTTONUP, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_XBUTTONDOWN или WM_XBUTTONUP.

lParam [in]

Тип: LPARAM

Указатель на структуру MSLLHOOKSTRUCT .

Возвраты

Тип: LRESULT

Если nCode меньше нуля, процедура перехватчика должна возвращать значение, возвращаемое CallNextHookEx.

Если nCode больше нуля или равно нулю, и процедура перехватчика не обрабатывала сообщение, настоятельно рекомендуется вызывать CallNextHookEx и возвращать возвращаемое значение; в противном случае другие приложения, установленные WH_MOUSE_LL перехватчики, не будут получать уведомления об перехватчиках и могут вести себя неправильно в результате.

Если процедура перехватчика обработала сообщение, она может вернуть ненулевое значение, чтобы система не передавала сообщение остальной части цепочки перехватчиков или целевой процедуры окна.

Замечания

Приложение устанавливает процедуру перехватчика, указав тип перехватчика WH_MOUSE_LL и указатель на процедуру перехватчика в вызове функции SetWindowsHookExA SetWindowsHookExA/SetWindowsHookExW .

Этот перехватчик вызывается в контексте установленного потока. Вызов выполняется путем отправки сообщения в поток, который установил перехватчик. Таким образом, поток, устанавливающий перехватчик, должен иметь цикл сообщений.

Входные данные мыши могут поступать из локального драйвера мыши или из вызовов функции mouse_event . Если входные данные исходят из вызова mouse_event, входные данные были "внедрены". Однако WH_MOUSE_LL крючок не внедряется в другой процесс. Вместо этого контекст переключается обратно в процесс, который установил перехватчик, и он вызывается в исходном контексте. Затем контекст переключается обратно в приложение, которое создало событие.

Процедура перехватчика должна обрабатывать сообщение меньше времени, чем запись данных, указанная в значении LowLevelHooksTimeout в следующем разделе реестра:

HKEY_CURRENT_USER\Control Panel\Desktop

Значение указывается в миллисекундах. Если процедура перехватчика истекает, система передает сообщение следующему перехватчику. Однако в Windows 7 и более поздних версиях крючок автоматически удаляется без вызова. Приложению не удается узнать, удаляется ли крючок.

Windows 10 версии 1709 и более поздних версий Максимальное значение времени ожидания, которое позволяет система, составляет 1000 миллисекунд (1 секунду). Система по умолчанию будет использовать 1000 миллисекунда времени ожидания, если значение LowLevelHooksTimeout имеет значение больше 1000.

Замечание

Отладочные перехватчики не могут отслеживать этот тип перехватчиков мыши низкого уровня. Если приложение должно использовать перехватчики низкого уровня, оно должно запускать перехватчики в выделенном потоке, который передает работу рабочему потоку, а затем немедленно возвращается. В большинстве случаев, когда приложению необходимо использовать перехватчики низкого уровня, вместо этого он должен отслеживать необработанные входные данные. Это связано с тем, что необработанные входные данные могут асинхронно отслеживать сообщения мыши и клавиатуры, предназначенные для других потоков более эффективно, чем низкоуровневые перехватчики. Дополнительные сведения о необработанных входных данных см. в разделе "Необработанные входные данные".

См. также

CallNextHookEx

mouse_event

KBDLLHOOKSTRUCT

MSLLHOOKSTRUCT

SetWindowsHookEx

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

WM_MOUSEWHEEL

WM_RBUTTONDOWN

WM_RBUTTONUP

Обработчики

О крючках