Я успешно установил WH_GETMESSAGE
зацепить SetWindowsHookEx
и я могу видеть WM_POINTERDOWN
, WM_POINTERUP
и т.д. сообщения, которые получает приложение. (Это 32-разрядное настольное приложение, работающее в Windows 8.1.)
Теперь я не только хочу увидеть эти сообщения, но я хочу Удалить некоторые из них.
Документация для GetMsgProc говорит:
Подключаемая процедура GetMsgProc может проверять или модифицировать сообщение. После того, как подключаемая процедура возвращает управление системе, функция GetMessage или PeekMessage возвращает сообщение вместе со всеми изменениями в приложение, которое первоначально вызвало его.
С WM_KEYUP
Сообщения, которые, кажется, работают нормально. Я могу установить сообщение WM_NULL
в крючке, и ключевое событие исчезнет.
С WM_POINTER...
сообщения, однако, это не похоже на работу. Приложение все еще получает сообщения (проверено в отладчике).
Может быть, есть какой-то другой способ фильтровать / удалять такие сообщения?
Редактировать: он должен работать с немодифицированными сторонними приложениями (отсюда и использование хука).
Обновление: мне удалось предотвратить касание событий клика, агрессивно вызывая PeekMessage
в крючке (вероятно, не очень хорошая идея в долгосрочной перспективе). Тем не менее, я до сих пор не могу предотвратить прокрутку на ощупь.
Решение 1:
WH_GETMESSAGE
не предназначен для удаления или изменения сообщений, только для их мониторинга. К сожалению, альтернативное решение Марка — использование WH_KEYBOARD_LL
а также WH_MOUSE_LL
— Похоже, не решить проблему (потому что мультитач не попадает в категорию сообщения мыши). Извините, Марк!
Я хотел бы отметить, WH_CALLWNDPROC
, который получает сообщения до их предполагаемое окно. Кажется, это приемлемый способ изменения сообщений.
Решение 2:
Возможно, что целевое окно не заботится о WM_POINTER...
сообщения вообще! Это может быть обнаружение сенсорного ввода через Сырой ввод API, как это демо здесь. Попробуйте следить за WM_INPUT
сообщения также.
Примечание 1: необработанные входные сообщения могут быть удалены, но не могут быть изменены или созданы.
Примечание 2: я не совсем уверен, но необработанный WM_INPUT
сообщения могут создавать утечку памяти, потому что это практически один массивный указатель. На всякий случай обработайте сообщения в вашей процедуре подключения.
Других решений пока нет …