3
想知道如果有一種方法可以在可可中接收回調,如果用戶正在觸摸Magic Mouse或Trackpad?是否可以檢測Magic Mouse/Trackpad是否被觸摸?
我看着石英活動,但似乎我只能得到回調,如果鼠標移動或點擊等
注意,我想收到的回調,即使我的應用程序是不活躍。這是一個後臺實用程序應用程序另外,它不能使用私有框架,因爲它將成爲Mac App Store應用程序。
想知道如果有一種方法可以在可可中接收回調,如果用戶正在觸摸Magic Mouse或Trackpad?是否可以檢測Magic Mouse/Trackpad是否被觸摸?
我看着石英活動,但似乎我只能得到回調,如果鼠標移動或點擊等
注意,我想收到的回調,即使我的應用程序是不活躍。這是一個後臺實用程序應用程序另外,它不能使用私有框架,因爲它將成爲Mac App Store應用程序。
您可以使用此代碼以捕獲的事件:由於受自然(創建一個新的Cocoa應用程序,並把這個應用程序中的代表)
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
initCGEventTap();
}
NSEventMask eventMask = NSEventMaskGesture|NSEventMaskMagnify|NSEventMaskSwipe|NSEventMaskRotate|NSEventMaskBeginGesture|NSEventMaskEndGesture;
CGEventRef eventTapCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef eventRef, void *refcon) {
// convert the CGEventRef to an NSEvent
NSEvent *event = [NSEvent eventWithCGEvent:eventRef];
// filter out events which do not match the mask
if (!(eventMask & NSEventMaskFromType([event type]))) { return [event CGEvent]; }
// do stuff
NSLog(@"eventTapCallback: [event type] = %ld", [event type]);
// return the CGEventRef
return [event CGEvent];
}
void initCGEventTap() {
CFMachPortRef eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, kCGEventTapOptionListenOnly, kCGEventMaskForAllEvents, eventTapCallback, nil);
CFRunLoopAddSource(CFRunLoopGetCurrent(), CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0), kCFRunLoopCommonModes);
CGEventTapEnable(eventTap, true);
}
但..沙箱可能會阻止您使用CGEventTapCreate
,它允許應用程序收聽整個事件系統,這不是很安全。如果不使用沙箱,則可以接受,則在觸摸板上進行新的觸摸時調用eventTapCallback
。