Низкоуровневый крючок для мыши и DirectX

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

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

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

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

Обновить

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

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

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

Подключение Windows API
Выявлено перехват API
Перехват API выявил часть 2
Перехват вызовов с помощью блокнота
madCodeHook
IAT Function Hooking

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

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

1 ответ

Решение

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

Также смотрите пример подключения Direct3D в Википедии.

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

Другие вопросы по тегам