Функция 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.
Примечание
Перехватчики отладки не могут отслеживать этот тип перехватчиков мыши низкого уровня. Если приложение должно использовать перехватчики низкого уровня, оно должно запускать перехватчики в выделенном потоке, который передает работу рабочему потоку, а затем немедленно возвращается. В большинстве случаев, когда приложению необходимо использовать перехватчики низкого уровня, оно должно отслеживать необработанные входные данные. Это связано с тем, что необработанный ввод может асинхронно отслеживать сообщения мыши и клавиатуры, предназначенные для других потоков, более эффективно, чем низкоуровневые перехватчики. Дополнительные сведения о необработанных входных данных см. в разделе Необработанные входные данные.