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