Frage

Gibt es eine Möglichkeit zur Registrierung für die globalen Mausereignisse in Cocoa bewegten? Ich war in der Lage für die Ereignisse des InstallEventHandler() mit Hilfe von Kohlenstoff zu registrieren, würde aber eine Cocoa äquivalent bevorzugen. Ich habe für NSNotificationCenter Ereignisse gesucht, aber es scheint keine öffentliche Veranstaltung Namen zu sein (gibt es Privaten?)

Alternativ ist es eine Möglichkeit, NSTrackingArea für Ansichten mit einem clearColor Hintergrund zu benutzen?

Die App ist nur Snow Leopard.

War es hilfreich?

Lösung

In Snowleopard gibt es eine neue Klassenmethode auf NSEvent, die genau das tun, was Sie wollen: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block. Sie werden mask = NSMouseMovedMask wollen.

Andere Tipps

Eine ähnliche Frage wurde bereits auf Stackoverflow gestellt: Wie eine transparente NSView Unterklasse Griff machen Mausereignisse?

Um es zusammenzufassen, die tansparent Ansicht Methode funktionierte nicht. Quartz Event-Taps scheinen die beste Antwort zu sein.

Hier sind einige Hinweise auf die Arbeit mit Hähnen:

  1. Erstellen Sie den Hahn mit CGEventTapCreate.
    a) Für den Standort (erste) Parameter, den Sie wahrscheinlich kCGSessionEventTap verwenden werden soll.
    b) Für die Platzierung (Zweit-) Parameter werden Sie wahrscheinlich wollen kCGHeadInsertEventTap.
    c) Für den Fall, Maskenparameter, versuchen (1 << kCGEventMouseMoved).

  2. Erstellen einer Laufschleife Quelle mit CFMachPortCreateRunLoopSource, das Ereignis tap als zweiten Parameter.

  3. Fügen Sie die Laufschleife Quelle zu Ihrer Laufschleife. Unter der Annahme, wollen Sie es auf die Hauptlaufschleife hinzugefügt, tun: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  4. das Ereignis Hahn mit CGEventTapEnable Aktivieren

Wenn Sie die Maus ganz gleich verfolgen möchten, wo es ist, möchten Sie eine CGEventTap. Es gibt keine Cocoa gleichwertig. Wenn Sie es einfach in Ihre Anwendung verfolgen wollen, dann sollten Sie erklären, warum Sie finden, sich so ein wenig mehr gründlich zu tun, nicht in der Lage.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top