2012-07-12 7 views
6

Ich versuche, eine Mac OS Menü Extra-Anwendung zu schreiben, die ein Kontextmenü mit den Menüleisten-Elementen der gerade aktiven Anwendung anzeigt, wenn der Benutzer eine der Tasten drückt. Die Anzeige des Kontextmenüs kann ich gut machen, aber ich kann nicht scheinen, die Menüleiste der aktuell aktiven Anwendung zu erhalten. Im Moment benutze ich [[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:], um den Namen der aktiven Anwendungen zu erhalten, aber NSRunningApplication scheint sehr wenig andere Informationen zu enthalten. Gibt es eine Möglichkeit, Informationen über Anwendungsmenüs von einer externen Anwendung zu erhalten?Objective-C: Holen Sie sich Menüinformationen aus der externen Anwendung

UPDATE:

Mit dem ScriptingBridge Rahmen scheint recht gut zu funktionieren, wenn Sie zufrieden sind mit 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); 
     } 
    } 

wird eine Liste der verfügbaren Menüs aus der Anwendung der Menüleiste auszudrucken . Haben Sie nicht einen Weg, um das Kontextmenü zu finden, so dass ich dies nur noch nicht nennen beantwortet ...

Dies war nützlich zu: http://robnapier.net/blog/scripting-bridge-265

+0

** DANKE! ** Ich würde Ihnen gerne mehr als ein +1 geben, aber ich würde nicht wissen, wie. Das Kompilieren von '/ System/Library/CoreServices/System Events.app' in eine Kopfzeile ist wahrscheinlich das Seltsamste, was ich jemals mit Xcode gemacht habe, aber hey, es funktioniert! Würdest du zufällig wissen, wo die Abkürzung oder 'keyEquivalent' -Eigenschaft in einem' SystemEventsMenuItem' versteckt ist? – epologee

Antwort

0

Sie AppleScript einen Menüpunkt simulieren können, klicken wie gezeigt here, aber ich bin mir nicht sicher, ob es möglich ist, die Namen aller Menüpunkte dynamisch zu greifen, um diese Methode zu verwenden, müssen Sie bereits die Namen in der App fest codiert haben.

+0

Hey, danke für den Applescript Tipp! Ich habe etwas herumgegrubbelt, habe [diesen Artikel] gefunden (http://hints.macworld.com/article.php?story=20111208191312748), der eine Art von Applescript hat, ziemlich genau das zu tun, was ich will ... ich behalte es Suche nach einer Objective-c-Methode. Ein Applescript in meine App zu integrieren könnte sehr unordentlich werden. – alaroldai

+0

Sie können AppleScript aus Cocoa-Anwendungen ohne große Probleme verwenden, siehe [NSAppleScript] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAppleScript_Class/Reference/Reference.html). Offensichtlich ist es nicht so schön wie Straight Objc, aber ich weiß nicht, ob Sie eine einfache eingebaute Lösung in reinem Objc finden werden. Viel Glück aber – stonesam92