只是想知道如果用户触摸了魔术鼠标或触控板,是否有办法在Cocoa中接收回调?
我查看了Quartz事件,但似乎只有在鼠标移动或点击等情况下我才能得到回调。
请注意,即使我的应用程序未处于活动状态,我也希望收到回调。这是一个后台实用程序。此外,它不能使用私人框架,因为它将成为Mac应用商店的应用程序。
您可以使用此代码捕获事件:(创建一个新的Cocoa应用程序并将其放入应用程序委托中)
NSEventMask eventMask = NSEventMaskGesture | NSEventMaskMagnify | NSEventMaskSwipe | NSEventMaskRotate | NSEventMaskBeginGesture | NSEventMaskEndGesture;
CGEventRef eventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef eventRef, void *userInfo) {
NSEvent *event = [NSEvent eventWithCGEvent:eventRef];
// only act for events which do match the mask
if (eventMask & NSEventMaskFromType([event type])) {
NSLog(@"eventTapCallback: [event type] = %ld", [event type]);
}
return [event CGEvent];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventMaskForAllEvents, eventTapCallback, nil);
CFRunLoopAddSource(CFRunLoopGetCurrent(), CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0), kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
}
但是。。沙盒可能会阻止您使用CGEventTapCreate
,因为从本质上讲,它允许应用程序侦听整个事件系统,这不是很安全。如果您可以接受不使用沙盒,则在触摸板上进行新的触摸时会调用eventTapCallback
。