teclado tareas salida reinicio reiniciar puedo mac forzar con apagar apagado administrador cocoa core-graphics

cocoa - tareas - ¿Cómo se puede detectar el control de la misión o el conmutador Comando-Tabulador que reemplaza el programa de uno en OS X?



no puedo forzar salida mac (2)

Estoy tratando de usar CGAssociateMouseAndMouseCursorPosition (NO) en un programa. Esto desconecta el mouse del cursor en pantalla cuando su aplicación está "en primer plano". Desafortunadamente, también se desconecta cuando Mission Control o el selector de aplicaciones o quién sabe qué más aparece.

Hasta ahora sé:

  • La aplicación aún está activa.
  • La ventana sigue siendo clave.
  • No se envía nada al centro de notificaciones predeterminado cuando surgen estas cosas.
  • La aplicación deja de recibir eventos movidos por el mouse, pero un controlador NSEvent addGlobalMonitorForEventsMatchingMask: también no los recibe, lo que es extraño, por decir lo menos. Debe recibir cualquier evento no entregado a mi aplicación. (Estaba planeando detectar los eventos que faltan para saber cuándo volver a asociar el mouse.

Entonces, ¿hay alguna manera de detectar cuándo mi aplicación ya no está bajo control, específicamente porque el Control de Misión o el interruptor se han hecho cargo? Realmente esperan que el mouse funcione y necesito restaurar esa asociación para ellos.


¿Has probado a preguntar NSRunningApplication?


Comparto su sorpresa de que un monitor de eventos global no está viendo los eventos. En una situación similar, usé un Tap Quartz Event Tap para un propósito similar. El monitor de eventos globales de Cocoa es bastante similar a los grifos de eventos, así que pensé que funcionaría.

Puse el grifo en kCGAnnotatedSessionEventTap y kCGAnnotatedSessionEventTap el resultado de CGEventGetIntegerValueField(event, kCGEventTargetUnixProcessID) con getpid() para determinar cuándo irían los eventos a otra aplicación (p. Ej., Mission Control o Exposé). (Desactivo la pestaña cuando mi aplicación renuncia al estado activo, por lo que solo debería recibir eventos destinados a otra aplicación cuando se presenta este tipo de IU de superposición).

Por cierto, usted mencionó el monitoreo del centro de notificaciones predeterminado, pero, si hay una notificación sobre el Control de la Misión o similar, es más probable que llegue al centro de notificación distribuida ( NSDistributedNotificationCenter ). Entonces, vale la pena verificar eso.