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

标签 macos cocoa multi-touch

我正在尝试编写一个库来从 Apple Magic Mouse 获取触摸事件。我正在使用私有(private)框架 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 的文档?

最佳答案

至少还有四种其他方法来获取 MTDeviceRef:

  • MTDeviceCreateDefault
  • MTDeviceCreateFromDeviceID
  • MTDeviceCreateFromGUID
  • MTDeviceCreateFromService

MultitouchSupport.framework 是一个私有(private)框架,您必须对其进行逆向工程才能了解应传递给这些函数的参数是什么。

此外,如果您从这些函数之一获取引用,则可能应该使用 MTDeviceRelease 函数释放设备引用。

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

BOOL MTDeviceIsBuiltIn(MTDeviceRef 设备)

再说一次,这只是一个猜测,我还没有真正尝试过。

关于macos - 如何判断 MTDeviceRef 是什么类型的多点触控设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928567/

相关文章:

macos - 如何在 RStudio 中安装新字体?

iphone - 如何创建多项问题?

安卓多点触控

jquery - 使用 jQuery 在网页上拖动多个元素的可能性

.net - ManipulationDelta - 只有平移才有值,缩放和旋转始终为 'Identity'

debugging - 如何在 OS X 上的进程启动时自动将调试器附加到进程?

macos - 使用 NSString 查找匹配后的单词

macos - 如何从Apple下载公证文件?

cocoa - 将 NSTextfield 添加到 NSRect

objective-c - 没有正确使用 NSLock,但似乎仍然有效