Domanda

Esiste un modo per registrarsi per eventi globali spostati con il mouse in Cocoa? Sono stato in grado di registrarmi per gli eventi utilizzando Carbon InstallEventHandler(), ma preferirei un equivalente di cacao. Ho cercato NSNotificationCenter eventi, ma sembra che non ci siano nomi di eventi pubblici (ce ne sono di privati?)

In alternativa, c'è un modo per usare NSTrackingArea per le viste con clearColor sfondo?

L'app è solo Snow Leopard.

È stato utile?

Soluzione

In SnowLeopard c'è un nuovo metodo di classe su NSEvent che fa esattamente quello che vuoi: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block. & # 8217; vuoi mask = NSMouseMovedMask.

Altri suggerimenti

Una domanda simile era già stata posta su StackOverflow: Come creare un handle di sottoclasse NSView trasparente eventi del mouse?

Per riassumere, il metodo di visualizzazione trasparente non ha funzionato. Quartz Event Taps sembra essere la risposta migliore.

Ecco alcuni suggerimenti su come lavorare con i tocchi:

  1. Crea il rubinetto con CGEventTapCreate.
    a) Per il parametro location (primo) probabilmente vorrai usare kCGSessionEventTap.
    b) Per il parametro di posizionamento (secondo) probabilmente vorrai kCGHeadInsertEventTap.
    c) Per il parametro maschera evento, prova (1 << kCGEventMouseMoved).

  2. Crea una sorgente di ciclo di esecuzione con CFMachPortCreateRunLoopSource, passando il rubinetto dell'evento come secondo parametro.

  3. Aggiungi l'origine del ciclo di esecuzione al ciclo di esecuzione. Supponendo di volerlo aggiungere al ciclo di esecuzione principale, eseguire: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  4. Abilita il tocco dell'evento con CGEventTapEnable

Se vuoi tenere traccia del mouse, non importa dove si trovi, vuoi un CGEventTap. Non esiste un equivalente di cacao. Se vuoi solo rintracciarlo nella tua applicazione, dovresti spiegare perché non riesci a farlo in modo un po 'più approfondito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top