Поделиться через


Функция LowLevelMouseProc

Описание

Определяемая приложением или библиотекой функция обратного вызова, используемая с функцией 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.

lParam [in]

Тип: LPARAM

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

Возвращаемое значение

Тип: LRESULT

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

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

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

Комментарии

Приложение устанавливает процедуру перехватчика, указывая тип обработчика WH_MOUSE_LL и указатель на процедуру перехватчика в вызове функции 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

Обработчики

Сведения о перехватчиках