2012-07-12 13 views
6

Estoy tratando de escribir una aplicación adicional del menú Mac OS que muestra un menú contextual que contiene los elementos de la barra de menú de la aplicación actualmente activa, cuando el usuario presiona alguna tecla rápida. La visualización del menú contextual puedo hacerlo bien, pero parece que no puedo obtener los elementos de la barra de menú de la aplicación actualmente activa. En este momento estoy usando [[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:] para obtener el nombre de las aplicaciones activas, pero NSRunningApplication parece contener muy poca información. ¿Hay alguna forma de que pueda obtener información sobre los menús de la aplicación desde una aplicación externa?Objetivo-C: obtener información del menú de la aplicación externa

ACTUALIZACIÓN:

Utilizando el marco ScriptingBridge parece que funciona bastante bien, si usted es feliz con AppleScript:

SystemEventsApplication* sevApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"]; 
    SystemEventsProcess* proc = [[sevApp applicationProcesses] objectWithName:appName]; 

    for (SystemEventsMenuBar* menuBar in proc.menuBars) { 
     for (SystemEventsMenuBarItem* menuBaritem in menuBar.menuBarItems) { 
      NSLog(@"%@", menuBaritem.name); 
     } 
    } 

imprimirá una lista de menús disponibles en la barra de menú de la aplicación . no han encontrado una manera de obtener el menú contextual, así que no voy a llamar a este respondió por el momento ...

Esto era útil también: http://robnapier.net/blog/scripting-bridge-265

+0

** ¡GRACIAS! ** Me encantaría darte más de un +1, pero no sabría cómo. Compilar '/ System/Library/CoreServices/System Events.app' en un encabezado es probablemente lo más extraño que he hecho con Xcode, pero bueno, ¡funciona! ¿Sabrías por casualidad dónde está escondido el acceso directo o la propiedad 'keyEquivalent' en un' SystemEventsMenuItem'? – epologee

Respuesta

0

Se puede utilizar para simular AppleScript hacer clic en un elemento de menú como se muestra here, pero no estoy seguro de si es posible captar dinámicamente los nombres de todos los elementos del menú; para usar ese método, ya debe tener los nombres codificados en la aplicación.

+0

¡Oye, gracias por el consejo de AppleScript! Investigué un poco, encontré [este artículo] (http://hints.macworld.com/article.php?story=20111208191312748) que tiene una forma de AppleScript de hacer casi exactamente lo que quiero ... Lo mantendré buscando un método Objective-c sin embargo. Agrupar un AppleScript en mi aplicación podría ser muy complicado. – alaroldai

+0

Puede usar appleScript desde aplicaciones Cocoa sin demasiados problemas, consulte [NSAppleScript] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAppleScript_Class/Reference/Reference.html) Obviamente no es tan bueno como objc directo, pero no sé si encontrará una solución integrada simple en objc puro. Buena suerte, aunque – stonesam92

Cuestiones relacionadas