2012-03-23 13 views
3

Magic Mouseまたはトラックパッドにユーザーが触れている場合、Cocoaでコールバックを受信する方法があるのだろうか?Magic Mouse /トラックパッドがタッチされているかどうかを検出できますか?

私はクォーツイベントに見えたが、それは私が私のアプリがアクティブでない場合でも、コールバックを受信したい

ノートなどマウスが移動したり、クリックされた場合、私は唯一のコールバックを得ることができそうです。これは背景ユーティリティアプリです。また、Mac App Storeアプリになるため、プライベートフレームワークを使用することはできません。

答えて

1

あなたはトラップにイベントをこのコードを使用することができます、

- (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); 

} 

(新しいCocoaアプリケーションを作成し、アプリケーションデリゲートでこれを置く)けど...サンドボックスは、おそらく自然にCGEventTapCreateを使用してからあなたを防ぐことができますアプリケーションが非常に安全ではないイベントシステム全体を聴くことができます。サンドボックスを使用しない場合は、タッチパッドで新しいタッチが行われるとeventTapCallbackが呼び出されます。

関連する問題