2012-03-23 112 views
3

想知道如果有一種方法可以在可可中接收回調,如果用戶正在觸摸Magic Mouse或Trackpad?是否可以檢測Magic Mouse/Trackpad是否被觸摸?

我看着石英活動,但似乎我只能得到回調,如果鼠標移動或點擊等

注意,我想收到的回調,即使我的應用程序是不活躍。這是一個後臺實用程序應用程序另外,它不能使用私有框架,因爲它將成爲Mac App Store應用程序。

回答

1

您可以使用此代碼以捕獲的事件:由於受自然(創建一個新的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

相關問題