我想为 Windows 开发一个多鼠标输入工具,能够有选择地控制单个鼠标设备。我还想跟踪禁用单击事件的设备的 MouseMove 事件并显示指针。
我所知道的最接近的现有解决方案(对于 Win7)是TeamPlayer,但它缺乏将控制限制为单个鼠标(或自定义光标图像)的功能,而是通过左键单击自由转移控制。我曾尝试通过 DeviceID 手动禁用设备,但一旦重新启用 TeamPlayer 将无法识别它们。此外,我的许多鼠标设备都具有相同的 DeviceID。
我一直在考虑微软的 MultiPoint SDK,已经使用 MultiPoint TUIO(MultiPoint SDK 的多点触控 TUIO 框架模拟器)和 Mindstorm 的 Unity3D-TUIO 在 Unity3D 中开发了一个交互式多鼠标游戏。
MultiPoint TUIO 使用 MultiPoint 覆盖窗口并将 TUIO 消息发送到底层目标窗口。但是,我看到这种方法(即路由MultipointMouseEvents)来控制非多点窗口中的指针存在问题。例如,单击事件将焦点从 MultiPoint 窗口移开,将控制权返回给所有输入设备。
任何人都可以提出更好的方法吗?
更新
关于在 Unity 中使用 MultiPoint,我发现调整 MultiPoint TUIO 有点矫枉过正,但使用了相同的方法。
我创建了一个应用程序(在 WPF 中)实现了一个 UDP 服务器和一个用 MultiPoint 注册的透明窗口,它会定位和调整自身大小以完全覆盖 Unity 窗口。[注意:您必须在 Unity Player 设置中启用“后台运行”。]
然后,我将 MultiPoint 鼠标位置和事件流式传输到UdpClient
Unity 中的一个接收器,该接收器位于一个名为 的类中,该类MultiPointInput
跟踪静态成员中的状态。然后,例如,使用MultiPointInput.mousePosition(mouseID)
(类似于Input.mousePosition
)访问特定的鼠标位置。
我已经在教室里成功使用了 15-20 个无线鼠标。SDK 非常稳定,但在使用多个无线鼠标(范围和干扰不同)时会出现潜在的硬件问题。