【发布时间】:2011-06-03 12:28:35
【问题描述】:
我的应用程序中已经有一个 WH_MOUSE_LL 挂钩,但鼠标和触摸板需要不同的行为。
我知道原始输入 API,但不知道如何将它与钩子一起使用:(
有什么建议吗?
【问题讨论】:
标签: windows delphi winapi hook touchpad
我的应用程序中已经有一个 WH_MOUSE_LL 挂钩,但鼠标和触摸板需要不同的行为。
我知道原始输入 API,但不知道如何将它与钩子一起使用:(
有什么建议吗?
【问题讨论】:
标签: windows delphi winapi hook touchpad
【讨论】:
拆卸一些触摸板驱动程序,看看它是如何工作的。这是唯一的方法,因为驱动程序可能使用不同的鼠标模拟方法。并且不要忘记为我的答案投票;)。
【讨论】:
在您的情况下,Raw Input 很可能会这样做。除了知道它在捕获输入但无法阻止它制作方面的限制之外,我没有任何经验,这意味着击键和鼠标事件将会发生其他应用程序,即使您使用原始输入捕获它们。最后,这是我在国外论坛上学到的。
我已经构建了一种替代方法,它能够区分设备、拦截输入并防止该输入制作。它是一个与设备过滤器驱动程序进行内部通信的 C 库。
我在 github 上有两个用于设备消歧的基本示例:
两个示例之间的主要区别在于,hardwareid 示例显示了如何获取设备硬件提供的标识符,包括供应商 ID、产品 ID,可能还有一些序列信息。问题是通常这些提供的信息不足以消除两个相同设备之间的歧义。它们恰好来自同一供应商,具有相同的型号,总而言之,它们相等但不相同。因此,持续消除歧义的是某种连接 id,它可能会在重新连接时发生变化,但有助于在运行时消除歧义,这就是识别示例展示的方法。
我有一台 macbook,并且能够通过我的图书馆将我的魔术鼠标与我的触摸板(在训练营)区分开来。
更多文档http://oblita.com/Interception。
注意:目前该库限制为 10 个键盘和 10 个鼠标。
【讨论】:
我试过 cnPackRawInput 并且它工作正常。 它有一个 KeyboardFromHandle 功能,我可以比较它是不是我的特殊键盘(例如 msr 设备、条形码扫描仪)。但我不知道它是否处理指针设备。反正你可以试试。如果它支持你可以使用。
抱歉英语不好。
【讨论】:
从任何不同的 USB 设备读取数据的非常简单的示例: http://sourceforge.net/projects/libusbdotnet/
这个开源 C# 项目。 Test_Bulk 模块正是您想要区分 USB 设备和从中读取(写入)数据的地方。
【讨论】:
如果您只想接收触摸板、鼠标或两者的输入,您可以使用Raw Input 注册您有兴趣接收输入的设备。您只需使用 RegisterRawInputDevices 函数注册以接收来自您感兴趣的设备的输入。这个Microsoft docs example 解释了如何为鼠标和键盘执行此操作。监听触摸板输入需要类似的方法。您将使用页面 0x0D 和用法 0x05。至于将此 API 与钩子一起使用,AbsoluteTouchEx 存储库可以提供一些有关如何执行此操作的指导。
【讨论】: