Низкоуровневый крючок для мыши и DirectX - PullRequest
9 голосов
/ 11 июля 2010

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

Я использую низкоуровневый крючок мыши и SetWindowsHookEx, чтобы отфильтровать эти клики. Работает относительно хорошо, за исключением WPF приложений. Я думаю, это потому, что эти приложения используют DirectX и DirectInput для обработки ввода, и именно поэтому я не могу отфильтровать щелчки в этих приложениях, поскольку они получают входные данные непосредственно из драйвера.

Есть ли способ фильтрации кликов в WPF / DirectX приложениях?

Я знаю, что в общем случае нецелесообразно глобально фильтровать клики, но это важно для моего приложения, и я позабочусь о том, чтобы оно не фильтровалось в играх и других программах. Но у WPF приложений есть обычные GUI, поэтому мне нужно отфильтровать и клики в них.

Обновление

Полагаю, я мог бы решить эту проблему, написав свой собственный драйвер фильтрации, но, поскольку у меня нет никакого опыта в написании драйверов, пожалуйста, дайте мне знать, если есть какое-либо другое решение.

Ресурсы перехвата API

Я нашел несколько полезных ссылок, касающихся перехвата API. Используйте это как ссылку.

Подключение Windows API
Обнаружено перехват API
Обнаружено перехват API, часть 2
Перехват вызовов с помощью блокнота
madCodeHook
Подключение функции IAT

ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ

WPF не использует DirectInput, но стандартные сообщения Win32 для обработки ввода (за исключением стилуса, который является источником всех проблем для меня, потому что я использую стилус для разработки, и я не знал Приложения WPF поддерживают стилус). Однако для фильтрации кликов в приложениях, использующих DirectInput, необходимо подключить API, как объясняется в принятом ответе.

1 Ответ

6 голосов
/ 22 августа 2010

Вы можете использовать метод, называемый перехватом API - вы переопределяете определенные вызовы библиотечных функций и задаете им свое собственное поведение.Существует множество подключаемых библиотек, которые упрощают эту задачу, наиболее часто используемые из них:* Microsoft Detours * MadCodeHook * Deviare API Hook * API Hijack

Также см. Пример википедии о подключении Direct3D .Вам просто нужно вставить свою подключаемую библиотеку в каждый процесс в системе, но, судя по вашему вопросу, я предполагаю, что вы уже достигли этого.

...