cocoa fullscreen nswindow osx-lion

cocoa - Mac OS X Lion: ¿Detectar si otra aplicación se está ejecutando en modo de pantalla completa?



fullscreen nswindow (3)

En una aplicación de Cocoa, ¿hay alguna manera de saber si otra aplicación está actualmente en modo de pantalla completa?

Mi aplicación está configurada para mostrarse en todos los espacios y escucha los eventos de mouseEntered para ordenarse al frente.

El problema es que cuando otra aplicación está en modo de pantalla completa y el usuario mueve el mouse a través del área negra donde se ubica la ventana de mi aplicación, se lleva al frente (sucede con varios monitores).

Solo he visto el comportamiento anterior con [self setCollectionBehavior: NSWindowCollectionBehaviorCanJoinAllSpaces]; habilitado

Aquí el otro código relevante para mi aplicación.

- (void) mouseEntered:(NSEvent *)theEvent { // Don''t do this when another app is in full screen mode: [[self window] orderFront:self]; }


Hmm, ¿has descartado el uso de applescript / scriptingbridge? Puede obtener el tamaño de las ventanas de applecript y compararlas con el tamaño de la pantalla. (o ¿no sabes en qué pantalla se encuentra una aplicación determinada?)
Ciertas aplicaciones que son accesibles tendrán un atributo ''AXFullScreen'' en sus ventanas. Por ejemplo, esto funciona para algunas aplicaciones:

tell application "System Events" tell process "Pages" repeat with myWin in windows get value of attribute "AXFullScreen" of myWin end repeat end tell end tell

La acción real parece estar baja en carbono ... MacWindows.hy CarbonEvents.h tienen referencias a "FullScreen" en ellos.

Tendrá que investigar esto sin embargo.


Los métodos antes mencionados de registro para

"NSWindowWillEnterFullScreenNotification"

no funciona, se pueden usar para notificar a su propia aplicación, no podemos detectar si alguna otra aplicación está en modo de pantalla completa o no.

Sin embargo, después de probar tantas opciones, descubrió la aplicación FullScreen detector en github este útil enlace ... :) :)

https://github.com/shinypb/FullScreenDetector.git


Utilizar notificaciones. Por ejemplo:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFull:) name:NSWindowWillEnterFullScreenNotification object:nil];

En realidad, probablemente querrá usar NSDistributedNotificationCenter en su lugar, ya que va a través de procesos.

Está agregando su objeto como observador, de modo que cuando otra cosa publique una notificación de que entrará en pantalla completa, su objeto recibirá esa notificación.

El selector es el mensaje / método al que desea llamar el proceso de notificación.

El parámetro nombre es el nombre real de la notificación. Estos son estándar, a menos que creara una notificación personalizada para algo que estaría usando.

El parámetro objeto es para especificar de qué objeto desea recibir notificaciones. Ya que quieres saber cuándo CUALQUIER aplicación se está mostrando en pantalla completa, querrás dejar este nulo.

¡Recuerde eliminar su objeto como observador antes de que sea desasignado!