【问题标题】:How to detect the input device if mouse and touchpad are both enabled如果鼠标和触摸板都启用,如何检测输入设备
【发布时间】:2011-06-03 12:28:35
【问题描述】:

我的应用程序中已经有一个 WH_MOUSE_LL 挂钩,但鼠标和触摸板需要不同的行为。

我知道原始输入 API,但不知道如何将它与钩子一起使用:(

有什么建议吗?

【问题讨论】:

    标签: windows delphi winapi hook touchpad


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      拆卸一些触摸板驱动程序,看看它是如何工作的。这是唯一的方法,因为驱动程序可能使用不同的鼠标模拟方法。并且不要忘记为我的答案投票;)。

      【讨论】:

        【解决方案3】:

        在您的情况下,Raw Input 很可能会这样做。除了知道它在捕获输入但无法阻止它制作方面的限制之外,我没有任何经验,这意味着击键和鼠标事件将会发生其他应用程序,即使您使用原始输入捕获它们。最后,这是我在国外论坛上学到的。

        我已经构建了一种替代方法,它能够区分设备、拦截输入并防止该输入制作。它是一个与设备过滤器驱动程序进行内部通信的 C 库。

        我在 github 上有两个用于设备消歧的基本示例:

        两个示例之间的主要区别在于,hardwareid 示例显示了如何获取设备硬件提供的标识符,包括供应商 ID、产品 ID,可能还有一些序列信息。问题是通常这些提供的信息不足以消除两个相同设备之间的歧义。它们恰好来自同一供应商,具有相同的型号,总而言之,它们相等但不相同。因此,持续消除歧义的是某种连接 id,它可能会在重新连接时发生变化,但有助于在运行时消除歧义,这就是识别示例展示的方法。

        我有一台 macbook,并且能够通过我的图书馆将我的魔术鼠标与我的触摸板(在训练营)区分开来。

        更多文档http://oblita.com/Interception

        注意:目前该库限制为 10 个键盘和 10 个鼠标。

        【讨论】:

          【解决方案4】:

          我试过 cnPackRawInput 并且它工作正常。 它有一个 KeyboardFromHandle 功能,我可以比较它是不是我的特殊键盘(例如 msr 设备、条形码扫描仪)。但我不知道它是否处理指针设备。反正你可以试试。如果它支持你可以使用。

          抱歉英语不好。

          http://www.google.com/codesearch/p?hl=en#6CoJUlkQju4/trunk/cnvcl/Source/NonVisual/CnRawInput.pas&q=rawinput%20package:http://cnpack%5C.googlecode%5C.com&sa=N&cd=3&ct=rc

          【讨论】:

            【解决方案5】:

            从任何不同的 USB 设备读取数据的非常简单的示例: http://sourceforge.net/projects/libusbdotnet/

            这个开源 C# 项目。 Test_Bulk 模块正是您想要区分 USB 设备和从中读取(写入)数据的地方。

            【讨论】:

              【解决方案6】:

              如果您只想接收触摸板、鼠标或两者的输入,您可以使用Raw Input 注册您有兴趣接收输入的设备。您只需使用 RegisterRawInputDevices 函数注册以接收来自您感兴趣的设备的输入。这个Microsoft docs example 解释了如何为鼠标和键盘执行此操作。监听触摸板输入需要类似的方法。您将使用页面 0x0D 和用法 0x05。至于将此 API 与钩子一起使用,AbsoluteTouchEx 存储库可以提供一些有关如何执行此操作的指导。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-07-09
                • 1970-01-01
                • 2012-05-31
                • 2019-10-12
                • 1970-01-01
                • 2016-09-03
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多