2009-11-01 20 views
13

He creado una aplicación de cacao NSStatusBar que se encuentra en la barra de estado del sistema.Cocoa NSStatusBar Global HotKey

Quiero asignar una tecla de acceso directo para que cuando se presiona alterna mis aplicaciones y mostrar el menú.

¿Es esto posible? En mi búsqueda y experimentación, he encontrado algunas formas diferentes de asignar teclas rápidas globales que se pueden presionar cuando la aplicación está en segundo plano, pero no encuentro ninguna forma de hacer el menú problemáticamente espectáculo.

¿Es esto posible ?, si alguien piensa que una forma de asignar una tecla de acceso rápido global es lo mejor, publíquela.

Gracias.


Una de las teclas de acceso rápido tutoriales que encontré fue en http://dbachrach.com/blog/2005/11/program-global-hotkeys-in-cocoa-easily/ para cualquier persona interesada.

+0

No hay ninguna razón para mostrar un menú a menos que se haya hecho clic o se haya "arrancado". –

Respuesta

11

Hay an actual hotkey API, que todavía existe en Snow Leopard y está disponible en 64 bits. Está diseñado específicamente para este propósito, a diferencia de los métodos NSEvent, que son esencialmente solo un contenedor basado en bloques alrededor de CGEventTaps.

La diferencia es que los métodos NSEvent (o directamente) CGEventTaps hacen nos fijamos en todos los caso de que entra, mientras que la API de tecla de acceso directo sólo se llama a su función cuando el usuario presiona su tecla de acceso directo.

+0

Gracias, funciona muy bien. ¿Sabes si es posible abrir el menú de aplicaciones a través del código? – Craig

+0

Craig: Sí. Ver el comentario de Dave DeLong sobre su respuesta. –

+0

JFYI: ahora Apple marca estos métodos como obsoletos, por lo que ya no deberían usarse –

17

Si su objetivo es 10.6+, hay alguna API nueva para NSEvent que puede hacer teclas rápidas globales. Para obtener más información, echa un vistazo a este post impresionante blog: http://cocoakids.net/global-hotkeys-in-cocoa-on-snow-leopard

EDITAR (mucho tiempo después)

Tooting mi molino un poco: yo nunca podría hacer las cosas como PTHotKey y otras bibliotecas para trabajar de la manera Estaba esperando, así que finalmente me di por vencido y escribí mi propio contenedor de HotKey. Tiene una API muy simple (le das un código de tecla, modificadores, un objetivo y una acción), que incluso admite elementos divertidos como los bloques de 10.6. Puede descargar la fuente aquí: http://github.com/davedelong/DDHotKey

+0

Gracias por la publicación del blog, funciona muy bien pero creo que utilizo el otro ejemplo para que también funcione en 10.5, ¿Sabes si es posible abrir el menú de aplicaciones a través del código? – Craig

+0

@Craig puedes hacer '[myStatusItem popUpStatusItemMenu: [myStatusItem menu]]', aunque eso no resaltará tu status status (que es cojo). La única otra cosa que sugeriría podría ser falsificar un clic sobre el elemento de estado. –

+0

Muchas gracias – Craig