处理多个鼠标

4
我们将使用Windows XP (嵌入式)带有双显示器的单个PC(瘦客户机)。
第一个显示器由银行官员使用(鼠标和键盘),官员将使用浏览器和一些银行win32应用程序。第二个显示器(触摸屏- elotouch)由坐在官员对面的访客使用,访客应该在浏览器中触摸反馈html按钮(第二个窗口),而不会干扰操作者的鼠标移动。两个屏幕都打开了自己的浏览器窗口(可能是子窗口)。我们的目标是通过两个独立的浏览器窗口实现鼠标和触摸屏的工作。
现在,我们可以使用原始输入(参见下面的链接)读取鼠标和触摸屏,并确定哪个设备生成事件。我们的想法是从ActiveX组件拦截触摸屏中的raw_input事件并将其发送到JS,并取消传播事件,以便触摸屏事件不会干扰主要鼠标。
问题:如何取消特定HID(鼠标)设备的传播(LEGACY)事件,或者是否有其他方法使其正常工作?能否指出或共享有关如何实现此目标的信息(MSDN或其他)?因为我们没有编写驱动程序的经验。

我找到了这些链接:http://cpnmouse.sourceforge.net/ http://www.dailycomputersolutions.com/blog/index.php/2008/11/01/multiple-mouse-cursors-on-a-windows-desktop/原始输入 http://msdn.microsoft.com/en-us/library/ms645543%28VS.85%29.aspx http://sourceforge.net/projects/dualmousekeyboa/ http://grouplab.cpsc.ucalgary.ca/software/SDGT/ - Tim TJey Jun
安装Linux和X服务器。在xorg.conf中禁用鼠标非常简单! - Matti Virkkunen
我们也检查了MultipointSDK,但是它有一个主要的缺点,只能在自己的应用程序内工作,除非我们将浏览器嵌入到我们的应用程序中,我们正在尝试寻找其他方法。 - Tim TJey Jun
http://social.msdn.microsoft.com/Forums/en/csharpgeneral/thread/f3fc4e11-5a60-4bd9-8ec6-913b335de640http://www.cplusplus.com/forum/windows/12927/http://msdn.microsoft.com/en-us/library/ms645546%28VS.85%29.aspxhttp://msdn.microsoft.com/en-us/library/ms645536.aspx - Tim TJey Jun
我向EloTouch的工作人员寻求帮助,但他们回复说 _很遗憾,由于Windows本身只支持一次控制一个鼠标光标,我们不支持那种类型的设置。Microsoft网站上有一篇有趣的文章可能会有用:http://www.microsoft.com/multipoint/mouse-sdk/developer.aspx,我们没有测试过也不知道它是否适用于触摸屏,但这可能值得研究一下_。 - Tim TJey Jun
显示剩余3条评论
2个回答

0
如何取消特定 HID(鼠标)设备传播(LEGACY)事件?
鼠标消息被发布到输入线程的消息队列中。鼠标消息在WM_MOUSEFIRSTWM_MOUSELAST范围内。最简单的方法是修改您的消息泵,使其吞噬此范围内的消息。
安排您的消息泵如下:
while(GetMessage( &msg, hWnd, 0, 0 ))
{ 
    if ((msg.message<WM_MOUSEFIRST) || (msg.message>WM_MOUSELAST))
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
}

0

我几年前曾经尝试过类似的东西,所以请原谅我有些含糊,但是我认为我使用 user32 API 中的 ClipCursor 成功将光标锁定在主屏幕上...

http://msdn.microsoft.com/en-us/library/ms648383(v=vs.85).aspx

...然后当来自触摸设备的鼠标事件因为超出了剪辑区域而被忽略时,WM_INPUT事件仍然会被触发,因此您可以捕获它们并直接将自己的鼠标点击事件发布到浏览器中,这不是技术上移动光标,因此不受剪辑的影响。

我已经有一段时间没有做过这个了,所以如果这不起作用,请原谅我。我明天会试着挖出我的旧原型,看看是否能找到任何有用的东西。


好的,谢谢!但是如何实现在触摸设备上在不同区域(超出剪辑区域)工作,它也将在第一个监视器中处于剪辑区域内。还是我误解了什么? - Tim TJey Jun
我可以假设触摸驱动程序将被校准到第二个监视器,因此触摸事件将在剪辑区域之外,我是对的吗? - Tim TJey Jun
好的,我现在记得我做了什么。不要使用ClipCursor将光标限制在第一个屏幕上,而是每次从主鼠标接收到鼠标移动消息时都使用ClipCursor,并将剪辑区域设置为光标位置的单个像素。这样第二个鼠标就无法对光标的实际位置产生影响。 - Dean North
触摸驱动程序应该像鼠标一样工作,因此您仍然可以从中获取鼠标事件。但是,由于您将限制光标位置,普通的鼠标点击在触摸驱动程序中不起作用。您需要自己监听事件,然后将鼠标消息发送到应该接收它们的窗口。在您的情况下,应该是一个全屏浏览器窗口,所以相对容易实现。 - Dean North

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接