3 votes

Est-il possible de détecter si Magic Mouse/Trackpad est touché ?

Je me demandais s'il existait un moyen de recevoir un callback dans Cocoa si l'utilisateur touchait la souris magique ou le trackpad ?

J'ai examiné les événements Quartz, mais il semble que je ne puisse obtenir des rappels que si la souris est en mouvement ou cliquée, etc.

Notez que je veux recevoir un rappel même si mon application n'est pas active. C'est une application utilitaire d'arrière-plan. De plus, elle ne peut pas utiliser de frameworks privés puisqu'il s'agit d'une application Mac App Store.

2voto

Antoine Lecaille Points 1291

Vous pouvez utiliser ce code pour piéger les événements : (créez une nouvelle application Cocoa et placez ce code dans le délégué de l'application)

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

mais le sandboxing vous empêchera probablement d'utiliser CGEventTapCreate parce que, par nature, il permet à une application d'écouter l'ensemble du système d'événements, ce qui n'est pas très sûr. Si la non-utilisation du bac à sable est acceptable pour vous, alors eventTapCallback est appelée lorsqu'un nouveau contact est effectué sur le pavé tactile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X