2012-07-12 11 views
6

Sto provando a scrivere un'applicazione extra del menu Mac OS che visualizza un menu contestuale contenente le voci della barra dei menu dell'applicazione correntemente attiva, quando l'utente preme alcuni tasti di scelta rapida. La visualizzazione del menu contestuale I può fare bene, ma non riesco a ottenere gli elementi della barra dei menu dell'applicazione correntemente attiva. Al momento sto usando [[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:] per ottenere il nome delle applicazioni attive, ma NSRunningApplication sembra contenere preziose altre informazioni. C'è un modo per ottenere informazioni sui menu delle applicazioni da un'applicazione esterna?Objective-C: recupera le informazioni del menu dall'applicazione esterna

UPDATE:

Utilizzando il quadro ScriptingBridge sembra funzionare abbastanza bene, se sei felice 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); 
     } 
    } 

stamperà un elenco di menu disponibili dalla barra menu dell'applicazione . Non hanno trovato un modo per ottenere il menu contestuale, quindi non mi chiamare questo ha risposto appena ancora ...

Questo è stato utile anche: http://robnapier.net/blog/scripting-bridge-265

+0

** GRAZIE! ** Mi piacerebbe darti più di un +1, ma non saprei come. Compilare '/ System/Library/CoreServices/System Events.app' in un header è probabilmente la cosa più strana che abbia mai fatto con Xcode ma hey, funziona! Sapresti dove la scorciatoia o la proprietà 'keyEquivalent' è nascosta in un' SystemEventsMenuItem'? – epologee

risposta

0

È possibile utilizzare AppleScript per simulare clic su una voce di menu come mostrato here, ma non sono sicuro che sia possibile afferrare dinamicamente i nomi di tutte le voci del menu, per usare quel metodo è necessario avere già i nomi codificati nell'app.

+0

Ehi, grazie per il suggerimento di applecript! Ho fatto un po 'di ricerche, ho trovato [questo articolo] (http://hints.macworld.com/article.php?story=20111208191312748) che ha un modo di fare un pasticcio esattamente quello che voglio ... Terrò cercando però un metodo Objective-c. Raggruppare un applescript nella mia app potrebbe diventare molto complicato. – alaroldai

+0

È possibile utilizzare appleScript dalle applicazioni di cacao senza troppi problemi, vedere [NSAppleScript] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAppleScript_Class/Reference/Reference.html). Ovviamente non è bello come objc diretto ma non so se troverai una semplice soluzione integrata in puro objc. Buona fortuna però – stonesam92