我正在尝试编写一个库来获取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的文档?
答案 0 :(得分:2)
至少还有其他四种方法可以获得MTDeviceRef
:
MTDeviceCreateDefault
MTDeviceCreateFromDeviceID
MTDeviceCreateFromGUID
MTDeviceCreateFromService
MultitouchSupport.framework是一个私有框架,你必须对其进行反向工程才能理解你应该传递给这些函数的参数。
此外,如果您从其中一个函数获取引用,则应该使用MTDeviceRelease
函数释放设备引用。
或者您可以尝试使用MTDeviceIsBuiltIn
功能过滤掉触控板。也许 BuiltIn 意味着笔记本电脑触控板。这只是一个疯狂的猜测,我只是看了MultitouchSupport框架二进制文件中的符号。给定函数名称,其签名可能是
BOOL MTDeviceIsBuiltIn(MTDeviceRef device)
同样,这只是一个猜测,我实际上没有尝试过。