【发布时间】:2010-07-11 14:37:52
【问题描述】:
我正在构建一个需要在系统范围内过滤一些鼠标点击的应用程序。也就是说,我需要让系统在特殊情况下忽略一些鼠标按键的点击。
我使用低级鼠标钩子和SetWindowsHookEx 过滤掉这些点击。除了WPF 应用程序外,它工作得相对较好。我猜这是因为这些应用程序使用DirectX 和DirectInput 进行输入处理,这就是为什么我无法过滤掉这些应用程序中的点击,因为它们直接从驱动程序获取输入。
有什么方法可以过滤WPF/DirectX应用程序中的点击吗?
我知道全局过滤点击通常不是一个好主意,但这对我的应用程序至关重要,我会确保它不会在游戏和其他程序中被过滤。但是WPF 应用程序有普通的GUI,所以我还需要过滤它们中的点击。
更新
我想我可以通过编写自己的过滤驱动程序来解决这个问题,但是由于我没有编写驱动程序的经验,如果有其他解决方案,请告诉我。
API 挂钩资源
我发现了一些有关 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,正如接受的答案所解释的那样。
【问题讨论】:
标签: .net directx mouse hook directinput