Подтвердить что ты не робот

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

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

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

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

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

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

Однако с сообщениями WM_POINTER... это не работает. Приложение по-прежнему получает сообщения (проверенные в отладчике).

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

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

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

4b9b3361

Ответ 1

Решение 1:

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

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

Решение 2:

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

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

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