Вы можете использовать этот код для перехвата событий: (создайте новое приложение 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
вызывается при новом касании сенсорной панели.