Можно ли обнаружить прикосновение к Magic Mouse / Trackpad? - PullRequest
3 голосов
/ 23 марта 2012

Просто интересно, есть ли способ получить обратный вызов в Какао, если пользователь прикоснулся к Magic Mouse или Trackpad?

Я посмотрел на Quartz Events, но, похоже, я могу получить обратные вызовы только если мышь двигается или щелкает и т. Д.

Обратите внимание, что я хочу получить обратный вызов, даже если мое приложение не активно. Это фоновое приложение. Кроме того, он не может использовать частные фреймворки, так как это будет приложение Mac App Store.

1 Ответ

2 голосов
/ 13 февраля 2013

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

...