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 ... :) :)
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!