开发者

Low level mouse hook and DirectX

开发者 https://www.devze.com 2023-01-07 05:03 出处:网络
I\'m building an application which needs to filter some mouse clicks system-wide. That is, I need to make the system ignore some mouse button clicks at special occasions.

I'm building an application which needs to filter some mouse clicks system-wide. That is, I need to make the system ignore some mouse button clicks at special occasions.

I use low level mouse hook and SetWindowsHookEx to filter out these clicks. It works relatively well, except for WPF applications. I guess that's because these applications use DirectX and DirectInput for input processing, and that's why I can't filter out clicks in these applications, since they get the input directly from the driver.

Is there any way how to filter clicks in WPF/DirectX applications?

I know it is generally not good idea to globally filter clicks, but it is crucial for my application, and I will make sure that it is not filtered in games and other programs. But WPF applications have ordinary GUI, so I need to filter clicks in them as well.

Update

I guess I could solve this problem by writing my own filtering driver, but since I don't have any experience in writing drivers, please let me know if there is any other solution.

API Hooking Resources

I've found some helpful links regarding API hooking. Use this as a reference.

Hooking Windows API

API hooking revealed

API hooking revealed Part 2

Hijack Textout C开发者_如何转开发alls From Notepad

madCodeHook

IAT Function Hooking

FINAL SOLUTION

WPF does not use DirectInput, but standard Win32 messages for input handling (except for stylus, which is the source for all problems for me, because I use stylus for development, and I wasn't aware WPF apps are stylus-aware). However for filtering clicks in apps that use DirectInput, one would have to hook API, as the accepted answer explains.


You could use a method called API hooking - you override specific calls to library functions and give them your own behavior. There are many hooking libraries out there that simplify this task, the most used ones are:
* Microsoft Detours
* MadCodeHook
* Deviare API Hook
* API Hijack

Also see Wikipedia example of hooking Direct3D.

You just need to insert your hooking library into each process in the system but judging from your question I assume you've already achieved that.

0

精彩评论

暂无评论...
验证码 换一张
取 消