views:

111

answers:

1

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.

+4  A: 

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.

dark_charlie
I actually use `WH_MOUSE_LL`, which does not need it's own `.dll`. Nevertheless, this is actually a very good idea! But I will need to learn `DirectX` and `DirectInput`, to hook the right functions. :-(
Paja
And I don't know if `WPF` actually uses `DirectInput` or `XInput`, so I will probably need to hook both.
Paja
Yes, you will have to find out which functions to hook in DirectInput and XInput but that shouldn't take much time I guess, Google is on your side. I have never used DirectInput/XInput directly so can't be of any help here.
dark_charlie