Question

Existe-t-il un moyen de s'inscrire aux événements globaux déplacés avec la souris dans Cocoa? Je pouvais m'inscrire aux événements en utilisant Carbon InstallEventHandler(), mais préférerais un équivalent à Cocoa. J'ai recherché NSNotificationCenter des événements, mais il ne semble pas y avoir de noms d'événements publics (existe-t-il des noms privés?)

Sinon, existe-t-il un moyen d'utiliser NSTrackingArea les vues avec un clearColor arrière-plan?

L'application est uniquement pour Snow Leopard.

Était-ce utile?

La solution

Dans SnowLeopard, il existe une nouvelle méthode de classe sur NSEvent qui fait exactement ce que vous voulez: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block. Vous & # 8217; vous voudrez mask = NSMouseMovedMask.

Autres conseils

Une question similaire avait déjà été posée sur StackOverflow: Comment créer un handle de sous-classe NSView transparent Événements de souris?

Pour résumer, la méthode de la vue par transparence ne fonctionnait pas. Les tapotements d’événement Quartz semblent être la meilleure réponse.

Voici quelques astuces pour travailler avec les robinets:

  1. Créez le robinet avec CGEventTapCreate.
    a) Pour le paramètre (premier) lieu que vous voudrez probablement utiliser kCGSessionEventTap.
    b) Pour le paramètre placement (deuxième), vous voudrez probablement kCGHeadInsertEventTap.
    c) Pour le paramètre de masque d'événement, essayez (1 << kCGEventMouseMoved).

  2. Créez une source de boucle d'exécution avec CFMachPortCreateRunLoopSource, en transmettant l'événement en tant que second paramètre.

  3. Ajoutez la source de la boucle d'exécution à votre boucle d'exécution. En supposant que vous vouliez l'ajouter à la boucle d'exécution principale, faites: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  4. Activer l'événement taper avec CGEventTapEnable

Si vous voulez suivre la souris, peu importe où elle se trouve, vous voulez un CGEventTap. Il n'y a pas d'équivalent cacao. Si vous souhaitez simplement le suivre dans votre application, vous devez expliquer pourquoi vous vous trouvez incapable de le faire de manière plus approfondie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top