如何判断MTDeviceRef是什么类型的多点触控设备

时间:2012-08-13 05:24:15

标签: macos cocoa multi-touch

我正在尝试编写一个库来获取Apple Magic Mouse鼠标的触摸事件。我正在使用私有框架MultitouchSupport.framework并使用下面的代码获取多点触控设备列表。这很好用,我的库工作得很好,除了它从所有多点触控设备(如笔记本电脑触控板)获取触摸事件,而我只想从Magic Mouse获取事件。如何判断我正在查看哪种类型的设备才能监控鼠标?

我用来监听事件的代码是

        NSMutableArray* deviceList = (__bridge NSMutableArray*)MTDeviceCreateList(); //grab our device list

    for(int i = 0; i<[deviceList count]; i++) //iterate available devices
    {
        MTRegisterContactFrameCallback([deviceList objectAtIndex:i], touchCallback); //assign callback for device
        MTDeviceStart([deviceList objectAtIndex:i], 0); //start sending events
    }

那么如何过滤掉从MTDeviceCreateList返回的MTDeviceRefs,才开始收听魔术鼠标设备?或者至少,过滤掉默认的笔记本电脑触控板?是否有使用此MultitouchSupport.framework的文档?

1 个答案:

答案 0 :(得分:2)

至少还有其他四种方法可以获得MTDeviceRef

  • MTDeviceCreateDefault
  • MTDeviceCreateFromDeviceID
  • MTDeviceCreateFromGUID
  • MTDeviceCreateFromService

MultitouchSupport.framework是一个私有框架,你必须对其进行反向工程才能理解你应该传递给这些函数的参数。

此外,如果您从其中一个函数获取引用,则应该使用MTDeviceRelease函数释放设备引用。

或者您可以尝试使用MTDeviceIsBuiltIn功能过滤掉触控板。也许 BuiltIn 意味着笔记本电脑触控板。这只是一个疯狂的猜测,我只是看了MultitouchSupport框架二进制文件中的符号。给定函数名称,其签名可能是

BOOL MTDeviceIsBuiltIn(MTDeviceRef device)

同样,这只是一个猜测,我实际上没有尝试过。