【问题标题】:Low level mouse hook and DirectX低级鼠标钩子和 DirectX
【发布时间】:2010-07-11 14:37:52
【问题描述】:

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

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

有什么方法可以过滤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


    【解决方案1】:

    您可以使用一种称为 API 挂钩的方法 - 您覆盖对库函数的特定调用并赋予它们您自己的行为。有许多挂钩库可以简化此任务,最常用的是:
    * Microsoft Detours
    * MadCodeHook
    * Deviare API Hook
    * API Hijack

    另见Wikipedia example of hooking Direct3D

    您只需将挂钩库插入系统中的每个进程,但从您的问题来看,我假设您已经实现了。

    【讨论】:

    • 我实际上使用WH_MOUSE_LL,它不需要它自己的.dll。不过,这实际上是一个非常好的主意!但我需要学习DirectXDirectInput,才能挂钩正确的功能。 :-(
    • 而且我不知道WPF 是否真的使用DirectInputXInput,所以我可能需要同时挂钩。
    • 是的,您必须找出要在 DirectInput 和 XInput 中挂钩的函数,但我猜这应该不会花费太多时间,Google 就在您身边。我从来没有直接使用过 DirectInput/XInput,所以在这里没有任何帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多