是否可以检测是否正在触摸Magic Mouse / Trackpad?

问题描述 投票:3回答:1

只是想知道如果用户触摸魔术鼠标或触控板,是否有办法在Cocoa中接收回调?

我查看了Quartz Events,但看起来我只能在鼠标移动或点击等时获得回调。

请注意,即使我的应用未处于活动状态,我也希望收到回调。这是一个后台实用程序应用程序。此外,它不能使用私有框架,因为它将是一个Mac App Store应用程序。

macos cocoa mouseevent quartz-graphics
1个回答
2
投票

您可以使用此代码来捕获事件:(创建一个新的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

© www.soinside.com 2019 - 2024. All rights reserved.