我正在构建一个需要在系统范围内过滤鼠标点击的应用程序。也就是说,我需要让系统在特殊时刻忽略一些鼠标按钮点击。
我使用低级鼠标勾和SetWindowsHookEx
来过滤掉这些点击。除WPF
应用程序外,它的工作相对较好。我想这是因为这些应用程序使用DirectX
和DirectInput
进行输入处理,这就是为什么我无法过滤掉这些应用程序中的点击,因为它们直接从驱动程序获取输入。
有什么方法可以过滤WPF
/ DirectX
个应用中的点击次数吗?
我知道全局过滤点击通常不是一个好主意,但它对我的应用程序至关重要,我会确保它不会在游戏和其他程序中过滤。但WPF
应用程序具有普通GUI
,因此我也需要过滤其中的点击次数。
我想我可以通过编写自己的过滤驱动程序来解决这个问题,但由于我没有编写驱动程序的经验,请告诉我是否还有其他解决方案。
我找到了一些有关API挂钩的有用链接。以此为参考。
Hooking Windows API
API hooking revealed
API hooking revealed Part 2
Hijack Textout Calls From Notepad
madCodeHook
IAT Function Hooking
WPF does not use DirectInput, but standard Win32 messages for input handling(除了手写笔,这是我所有问题的根源,因为我使用手写笔进行开发,我不知道WPF应用程序是手写笔感知的)。但是,对于使用DirectInput的应用程序中的点击过滤,必须挂钩API,正如接受的答案所解释的那样。
答案 0 :(得分:6)
您可以使用一种名为API挂钩的方法 - 您可以覆盖对库函数的特定调用,并为它们提供您自己的行为。有许多挂钩库可以简化这项任务,最常用的是:
* Microsoft Detours
* MadCodeHook
* Deviare API Hook
* API Hijack
另见Wikipedia example of hooking Direct3D。
您只需要将挂钩库插入系统中的每个进程,但从您的问题判断我认为您已经实现了这一点。