Можно ли удалить сенсорные сообщения (WM_POINTERDOWN и т. Д.), Которые получает приложение?

Я успешно установил WH_GETMESSAGE зацепить SetWindowsHookEx и я могу видеть WM_POINTERDOWN, WM_POINTERUP и т.д. сообщения, которые получает приложение. (Это 32-разрядное настольное приложение, работающее в Windows 8.1.)

Теперь я не только хочу увидеть эти сообщения, но я хочу Удалить некоторые из них.

Документация для GetMsgProc говорит:

Подключаемая процедура GetMsgProc может проверять или модифицировать сообщение. После того, как подключаемая процедура возвращает управление системе, функция GetMessage или PeekMessage возвращает сообщение вместе со всеми изменениями в приложение, которое первоначально вызвало его.

С WM_KEYUP Сообщения, которые, кажется, работают нормально. Я могу установить сообщение WM_NULL в крючке, и ключевое событие исчезнет.

С WM_POINTER... сообщения, однако, это не похоже на работу. Приложение все еще получает сообщения (проверено в отладчике).

Может быть, есть какой-то другой способ фильтровать / удалять такие сообщения?

Редактировать: он должен работать с немодифицированными сторонними приложениями (отсюда и использование хука).

Обновление: мне удалось предотвратить касание событий клика, агрессивно вызывая PeekMessage в крючке (вероятно, не очень хорошая идея в долгосрочной перспективе). Тем не менее, я до сих пор не могу предотвратить прокрутку на ощупь.

11

Решение

Решение 1:

WH_GETMESSAGE не предназначен для удаления или изменения сообщений, только для их мониторинга. К сожалению, альтернативное решение Марка — использование WH_KEYBOARD_LL а также WH_MOUSE_LL — Похоже, не решить проблему (потому что мультитач не попадает в категорию сообщения мыши). Извините, Марк!

Я хотел бы отметить, WH_CALLWNDPROC, который получает сообщения до их предполагаемое окно. Кажется, это приемлемый способ изменения сообщений.

Решение 2:

Возможно, что целевое окно не заботится о WM_POINTER... сообщения вообще! Это может быть обнаружение сенсорного ввода через Сырой ввод API, как это демо здесь. Попробуйте следить за WM_INPUT сообщения также.

Примечание 1: необработанные входные сообщения могут быть удалены, но не могут быть изменены или созданы.

Примечание 2: я не совсем уверен, но необработанный WM_INPUT сообщения могут создавать утечку памяти, потому что это практически один массивный указатель. На всякий случай обработайте сообщения в вашей процедуре подключения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]