Низкоуровневый рычаг мыши и DirectX

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

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

Есть ли любой путь, как отфильтровать щелчки в WPF/DirectX приложения?

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

Обновление

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

Ресурсы сцепления API

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

Сцепление Windows API
Сцепление API показано
API, сцепляющийся, показал Часть 2
Угоните вызовы Textout из блокнота
madCodeHook
Сцепление функции IAT

КОНЕЧНОЕ РЕШЕНИЕ

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

9
задан Community 23 May 2017 в 12:30
поделиться

1 ответ

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

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

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

6
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: