低级鼠标钩和DirectX

Pay*_*aya 9 .net directx mouse hook directinput

我正在构建一个需要在系统范围内过滤鼠标点击的应用程序.也就是说,我需要在特殊情况下让系统忽略一些鼠标按钮点击.

我使用低级鼠标钩并SetWindowsHookEx过滤掉这些点击.除WPF应用程序外,它的工作相对较好.我想这是因为这些应用程序使用DirectXDirectInput进行输入处理,这就是为什么我不能过滤掉这些应用程序中的点击,因为它们直接从驱动程序获得输入.

有没有办法过滤WPF/ DirectX应用程序中的点击?

我知道全局过滤点击通常不是一个好主意,但它对我的应用程序至关重要,我会确保它不会在游戏和其他程序中过滤.但是WPF应用程序很普通GUI,所以我也需要过滤它们中的点击.

更新

我想我可以通过编写自己的过滤驱动程序来解决这个问题,但由于我没有编写驱动程序的经验,如果有任何其他解决方案,请告诉我.

API挂钩资源

我找到了一些有关API挂钩的有用链接.使用此作为参考.

挂钩Windows API
API挂钩透露
API挂钩透露第2部分
劫持Textout调用记事本
madCodeHook
IAT功能挂钩

最终解决方案

WPF不使用DirectInput,而是使用标准的Win32消息进行输入处理(除了手写笔,这是我所有问题的根源,因为我使用手写笔进行开发,我不知道WPF应用是手写笔感知的).但是,对于使用DirectInput的应用程序中的点击过滤,必须挂钩API,正如接受的答案所解释的那样.

Kar*_*nek 6

您可以使用一个名为API挂钩的方法 - 您覆盖对库函数的特定调用,并为它们提供您自己的行为.有许多挂钩库可以简化这项任务,最常用的是:
*Microsoft Detours
*MadCodeHook
*Deviare API Hook
*API Hijack

另见维基百科挂钩Direct3D的例子.

您只需要将挂钩库插入系统中的每个进程,但从您的问题判断我认为您已经实现了这一点.