使用两个鼠标在Windows

时间:2017-07-07 12:19:28

标签: c++ windows api

我目前正在尝试开发一个应用程序,使用两个鼠标在Windows中执行完全不同的操作。然而,在花了几天之后,我开始想知道我想做什么甚至可以使用Windows API。由于我不是Windows API的专家,我想知道我是否正在朝着正确的方向前进,或者我是否应该尝试完全不同的方式(也许开发一个驱动程序?)。

这就是我想要做的事:想象一下,我的电脑插入了两只老鼠。我想将第一个用作常规鼠标,而第二个用于执行完全不同的操作。例如,通过单击鼠标左键,它将在Firefox中打开一个新选项卡(向FireFox应用程序发送CTRL + T命令),单击右键时,它将发送CTRL + C.然后,通过向上移动第二个鼠标,它将放大,当向下移动时,firefox页面将缩小(因此屏幕上的鼠标光标将保持固定状态!)。我们的想法是识别当前使用的应用程序(哪一个具有鼠标/键盘焦点)并根据它执行不同的操作。因此,例如,第二个鼠标左键单击将在FireFox中生成CTRL + T,在WORD中生成CTRL + B,在记事本中生成CTRL + S(实际上,想法是随意参数化这些操作)。所有这一切,而第一只鼠标必须继续像普通鼠标一样。

因此,了解我的应用程序将在后台运行并且永远不会直接与用户交互(没有GUI,因为它不需要用户输入任何内容)是很重要的。其目的只是修改来自第二个鼠标的鼠标输入,并将其他输入(消息)发送到当前正在使用的应用程序。

到目前为止,我正在使用原始输入。我能够区分正在使用的鼠标,并且当在第二个鼠标上执行操作时,我能够将消息(特定于应用程序)发送到其他应用程序。当移动第二个鼠标时,我甚至可以将光标锁定在屏幕上(因此只有相应的消息被发送到感兴趣的应用程序!)。但是,我无法使用鼠标焦点阻止第二个鼠标发送到应用程序的按钮消息。因此,例如,当在记事本中点击第二个鼠标右键时,我的特定命令(暂时为“aaa”,因为我只是为了简单而尝试使用字母)被发送(并显示在记事本窗口中)但是上下文记事本菜单也会打开...(因此它也会收到WM_RBUTTONDOWN消息)。

我的问题是:当使用第二只鼠标时,如何阻止其他应用程序接收鼠标按钮消息({WM_RBUTTONDOWN等...)?它是否可能?问题是(根据我的理解)这些消息比WM_input messages具有更高的优先级...所以当我在我的应用程序中读取WM_input消息并检测到按钮是从第二个鼠标按下时,已经太晚了WM_xBUTTONDOWN已经发送了!)

我知道使用鼠标钩子,我可以阻止那些但是然后,没有办法区分消息的来源(当然,检测使用哪个鼠标是我应用程序的要点)。

我也尝试使用DirectInput8,但它不再支持使用多个鼠标(Windows特别说使用原始输入来实现此效果)。

所以,我想你知道你已经知道我已经迷失了,并且不知道我想做什么甚至是可以实现的。任何帮助都会受到欢迎。

期待阅读你的回复。

1 个答案:

答案 0 :(得分:0)

我准备建议钩子,但后来我读到你已经调查过了。我想,问题的最后一招是编写自己的驱动程序。 Windows以常规方式安装第二个鼠标后,您可以转到设备管理器并将要“重新利用”的鼠标驱动程序更改为您自己的驱动程序。

虽然开发一个驱动程序可能不是人们在项目中作为一项辅助任务所做的事情。