vender una teclado solo solas segundo samsung plano pequeño paginas mercado lanzar idea hizo desactivar como cierra celular app aplicaciones aplicacion actualizaciones abren abre cocoa osx

cocoa - una - mi celular abre y cierra aplicaciones solo



¿Cómo obtengo eventos de teclado en una ventana NSStatusWindowLevel mientras mi aplicación no está en primer plano? (3)

Después de crear una ventana translúcida (en base al código de ejemplo de Matt Gemmell ) quiero obtener eventos de teclado en esta ventana. Parece que solo hay eventos de teclado cuando mi aplicación es la aplicación activa, mientras que quiero eventos de teclado incluso cuando mi aplicación no está activa pero la ventana está visible.

Básicamente quiero un comportamiento como el proporcionado por la aplicación Quicksilver (por blacktree).

¿Alguien tiene alguna pista sobre cómo hacer esto?


Hay dos opciones:

  1. Use GetEventMonitorTarget() con un bucle ejecutado de Carbon para agarrar eventos del teclado. El código de muestra está disponible en esta página en CocoaDev.

  2. Registra una trampa de eventos con CGEventTapCreate . El código de muestra se puede encontrar en este hilo de la lista de correo de desarrolladores de Apple.

Editar: tenga en cuenta que estos métodos solo funcionan si marca "Habilitar acceso para dispositivos de asistencia" en el panel de preferencias de Universal Access.


Una ruta más simple que puede funcionar mejor para usted es hacer que su aplicación sea solo de fondo. La discusión sobre CocoaDev de la tecla LSUIElement plist explica cómo configurarlo. Básicamente, su aplicación no aparecerá en el dock o en el selector de aplicaciones, y no reemplazará la barra de menús de la aplicación actual cuando esté activada. Desde la perspectiva del usuario, nunca es la aplicación ''activa'', pero cualquier ventana que abra se puede activar y responder a eventos normalmente. La única advertencia es que nunca podrás mostrar tu barra de menú, por lo que probablemente tengas que configurar un NSStatusItem (uno de esos menús de icono que se muestran en el lado derecho de la barra de menú) para controlar (es decir, salir , trae las preferencias, etc.) tu aplicación.

Editar: Me olvidé por completo de la casilla de verificación Panel que no se activa en Interface Builder. Necesita usar un NSPanel en lugar de una NSWindow para obtener esta opción. Esta configuración permite que su panel acepte clics y entrada de teclado sin activar su aplicación. Apuesto a que una combinación de esta configuración y la API de Carbon Hot Keys es lo que QuickSilver está usando para su UI.


Actualizar:
De hecho, Apple parece haber cambiado todo nuevamente, comenzando con 10.5 BTW (recientemente actualicé y mi código de muestra no funcionó como antes).

Ahora, solo puede capturar eventos de KeySet configurando un evento si están habilitados los dispositivos raíz o de asistencia, independientemente del nivel que planee capturar e independientemente de si seleccionó capturar (lo que le permite modificar e incluso descartar eventos) o para ser solo escuchar Todavía puede obtener información cuando los indicadores han cambiado (incluso los cambian) y otros eventos, pero el ajuste de las claves no se produce en ninguna otra circunstancia.

Sin embargo, el uso del controlador de eventos de carbono y el método RegisterEventHotKey () le permite registrar una tecla de acceso rápido y recibirá una notificación cuando se presione, no necesita ser root para eso ni necesita dispositivos de asistencia habilitados. Creo que Quicksilver probablemente lo está haciendo de esa manera.