Cuando se ejecuta Mission Control, impide que las aplicaciones reciban eventos de teclado y mouse. También deja correr la última aplicación pensando que todavía tiene foco. Esto es un problema para mí porque no recibo eventos KeyUp o mouseUp si comienzo Mission Control con un botón del mouse o una tecla presionada y mi aplicación se comportará como si el botón o la tecla del mouse se mantuviera presionada.OSX: ¿Cómo detectar si se está ejecutando Mission Control?
Me gustaría una forma de leer los eventos del teclado y el mouse incluso cuando el Control de Misión está activo, o una forma de detectar que el Control de Misión está activo. Idealmente, me gustaría poder hacer esto último ya que efectivamente no puedo usar mi aplicación cuando se ejecuta Mission Control.
he intentado un par de cosas sin suerte:
- Uso addGlobalMonitorForEventsMatchingMask registrar un monitor global para eventos de teclado y de ratón. Esto captura los eventos del mouse (pero no los eventos del teclado, aunque el documentation dice que los eventos KeyDown deben enviarse al monitor global) cuando cambio a otra aplicación, pero el control de la misión no parece permitir que los eventos se propaguen a los monitores globales.
- Verificar
[[NSRunningApplication currentApplication] {isActive, ownsMenuBar}]
. Aparentemente, mi aplicación está activa aunque no esté recibiendo eventos. - Verificar
[NSApp keyWindow] != nil
. Aparentemente, una de mis ventanas debería recibir eventos clave. Ninguno de ellos lo son. - Compruebe si Mission Control es una de las aplicaciones en ejecución devuelto por
[NSWorkspace runningApplications]
. Mission Control no aparece en esta lista cuando se está ejecutando.
¡Gracias de antemano!
Editar:
fin he trabajado alrededor de este problema (aunque no de una manera muy satisfactoria). Para el mouse, resulta que puede consultar el estado de los botones presionados con [NSEvent pressedMouseButtons]
. Simplemente hago un seguimiento de lo que creo que debería ser el estado del mouse de los eventos NSLeftMouseDown y NSLeftouseUp y lo comparo con [NSEvent pressedMouseButtons]
de vez en cuando para asegurarme de que sean consistentes. Si no lo son, entonces sé que algo ha secuestrado mi evento NSLeftouseUp y actuar en consecuencia.
Para el teclado, no pude encontrar una manera de consultar el estado del teclado, por lo que no pude hacer una solución similar. Terminé desactivando la conmutación de aplicaciones usando presentation options cuando se presionan las teclas.
De los documentos: "Los eventos relacionados con las claves solo se pueden supervisar si la accesibilidad está habilitada o si su aplicación es de confianza para el acceso de accesibilidad (consulte AXIsProcessTrusted)." - Esta es probablemente la razón por la que no está obteniendo eventos clave. Habilite "acceso para dispositivos de asistencia" en las preferencias de accesibilidad del sistema y vea si eso cambia algo. – omz
Tiene razón, habilitar la accesibilidad sí me da eventos clave globales, pero no cuando el Control de la misión está activo. –
Recomiendo que presente un informe de error: developer.apple.com/bugreporter -Además, es mejor permitir que los seguidores ideen soluciones que pedir algo específico. Dicho esto, el informe de error solo debe identificar el problema de forma clara y concisa. – Bobjt