代码之家  ›  专栏  ›  技术社区  ›  Johan Kotlinski

OS X上的多个鼠标

  •  16
  • Johan Kotlinski  · 技术社区  · 15 年前

    我正在开发一个OSX应用程序,它应该从两个鼠标中获取输入。我想独立阅读每个鼠标的运动。最好的方法是什么?

    如果不可能,有没有一种方法可以通过编程方式禁用/启用其中一个鼠标?

    6 回复  |  直到 12 年前
        1
  •  13
  •   Bids    15 年前

    HID类设备接口绝对是您所需要的。基本上有两个步骤:

    首先你需要找到鼠标设备。为此,您需要构造一个匹配的字典,然后用它搜索IO注册表。有一些示例代码 here ,您将需要向字典中添加一些附加元素,这样您只需获取鼠标,而不是系统上的所有隐藏设备。这样的技巧应该可以做到:

    // Set up a matching dictionary to search the I/O Registry by class
    // name for all HID class devices`
    hidMatchDictionary = IOServiceMatching(kIOHIDDeviceKey);
    
    // Add key for device usage page - 0x01 for "Generic Desktop"
    UInt32 usagePage = 0x01;
    CFNumberRef usagePageRef = ::CFNumberCreate( kCFAllocatorDefault, kCFNumberLongType, &usagePage );
    ::CFDictionarySetValue( hidMatchDictionary, CFSTR( kIOHIDPrimaryUsagePageKey ), usagePageRef );
    ::CFRelease( usagePageRef );
    
    // Add key for device usage - 0x02 for "Mouse"
    UInt32 usage = 0x02;
    CFNumberRef usageRef = ::CFNumberCreate( kCFAllocatorDefault, kCFNumberLongType, &usage );
    ::CFDictionarySetValue( hidMatchDictionary, CFSTR( kIOHIDPrimaryUsageKey ), usageRef );
    ::CFRelease( usageRef );
    

    然后,您需要从上面找到的设备中监听x/y/按钮队列。这个 sample code 应该指向正确的方向。使用回调比轮询更有效!

    hid代码看起来比实际情况复杂得多——它是由cf材料制作的,而不是“冗长的”。

        2
  •  7
  •   Ken    15 年前

    看起来像 HID Manager 就是你要找的。

        3
  •  3
  •   Community George Stocker    7 年前

    您将要查看I/O工具包和HID(人机界面设备)管理器工具。

    HID管理器是 I/O Kit 因此,研究这些可能是有用的。有两个用于HID管理的API, older API 是有点痛苦然后你有了新的 10.5 and above API 更舒服一点。

    要理解的重要一点是,这可能不仅仅是一个快速修复,可能需要一些重要的工作才能使它运行起来。如果您可以假设安装了10.5或更高版本,那么使用Leopard API肯定会有所帮助。

    另外,根据您完成工作的方式,隐藏鼠标光标可能很重要,因为即使您从两个鼠标都接收到信息,鼠标光标仍可能移动很多。如果你的应用程序抓到了屏幕,我会使用Coregraphics来禁用光标,然后自己绘制。

    您还可以考虑为其中一个API找到一个包装器,示例可以在 this question .

        4
  •  1
  •   user57368    15 年前

    除非您可以强制其中一个鼠标不作为鼠标处理,否则这两个鼠标都将继续控制指针。但是,您可以使用iokit编写自定义的usb hid驱动程序,允许您的应用程序从一个或两个鼠标中读取数据(尽管这可能会干扰将它们作为普通鼠标使用)。 Building Customized User Client Drivers for USB Devices 这将是一个很好的开始如何与USB鼠标直接交互的地方。

        5
  •  0
  •   Boris Guéry    15 年前

    您可以查看USB/PS-2设备中断。 即使你不想重写一个所谓的驱动程序,它也可能有用,因为所有的鼠标都会发送它们的数据。

    您也可以检查这个页面,它可以提供一些提示 http://multicursor-wm.sourceforge.net/

        6
  •  0
  •   Sumit Singh phluid    12 年前

    也许这是你可以使用的解决方案 usb->rsr232 转换器和自己读取串行端口?