有没有办法确定Mac是否连接了多个鼠标?

时间:2014-04-11 16:25:44

标签: macos cocoa mouse

我正在寻找一种方法来确定运行游戏的Mac是否连接了多个鼠标。典型的现实世界示例是MacBook(内置触控板),外接鼠标连接。

我的游戏对常见配置有不同的控制设置,如键盘+鼠标,只有键盘(例如,只有触控板的MacBook,没有鼠标)和游戏手柄。理想情况下,我将能够在游戏中检测到这一点并相应地设置控件。

我打算支持Mac OS 10.7 +。

我可以使用Cocoa(或非Cocoa)API获取此信息吗?

作为参考,我已经问过(并得到了答案)基于Windows的计算机similar question

2 个答案:

答案 0 :(得分:1)

你应该处理IOKit ......以下示例列举了连接到系统的所有USB设备,你可以使用它来查看是否连接了指点设备:

#include <IOKit/IOKitLib.h>
#include <IOKit/usb/IOUSBLib.h>

int main(int argc, const char *argv[])
{
    CFMutableDictionaryRef matchingDict;
    io_iterator_t iter;
    kern_return_t kr;
    io_service device;

    /* set up a matching dictionary for the class */
    matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
    if (matchingDict == NULL)
    {
        return -1; // fail
    }

    /* Now we have a dictionary, get an iterator.*/
    kr = IOServiceGetMatchingServices(kIOMasterPortDefault, matchingDict, &iter);
    if (kr != KERN_SUCCESS)
    {
        return -1;
    }

    /* iterate */
    while ((device = IOIteratorNext(iter)))
    {
        /* do something with device, eg. check properties */
        /* ... */
        /* And free the reference taken before continuing to the next item */
        IOObjectRelease(device);
    }

   /* Done, release the iterator */
   IOObjectRelase(iter);
   return 0;
}

内置触控板应视为连接的USB设备,但我不确定......

答案 1 :(得分:1)

我最终使用ManyMouse,这是一个跨平台库,用于检测连接到计算机的鼠标数量。在OSX上,它使用HIDManager来检测鼠标。一旦它构建完成,连接到系统的鼠标数量就是单行:

const int available_mice = ManyMouse_Init();