2012-07-12 8 views
6

ユーザーがホットキーを押すと、現在アクティブなアプリケーションのメニューバー項目を含むコンテキストメニューを表示するMac OSメニューの追加アプリケーションを作成しようとしています。コンテキストメニューの表示はうまくできますが、現在アクティブなアプリケーションのメニューバー項目を取得できないようです。現時点では、アクティブなアプリケーションの名前を取得するのに[[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:]を使用していますが、NSRunningApplicationには貴重なその他の情報が含まれているようです。外部アプリケーションからアプリケーションメニューに関する情報を得る方法はありますか?Objective-C:外部アプリケーションからメニュー情報を取得する

UPDATE:あなたはAppleScriptを使用して満足している場合はScriptingBridgeフレームワークを使用して

は、かなりうまく動作するようです:

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); 
     } 
    } 

は、アプリケーションのメニューバーから使用できるメニューの一覧を出力します。あなたは、メニュー項目などをクリックしてシミュレートするAppleScriptを使用することができますhttp://robnapier.net/blog/scripting-bridge-265

+0

**ありがとうございました!**私はあなたに+1以上のものを提供したいと思いますが、どうすればよいかわかりません。 '/ System/Library/CoreServices/System Events.app'をヘッダーにコンパイルすることは、おそらく私がXcodeでやったことの中で最も奇妙なことです。ショートカットや 'keyEquivalent'プロパティが' SystemEventsMenuItem'のどこに隠れているのか分かりませんか? – epologee

答えて

0

この

が便利すぎた...コンテキストメニューを取得する方法を発見していないので、私は、これはまだ答えを呼び出しません。 hereと表示されていますが、すべてのメニュー項目の名前を動的に取得できるかどうかはわかりません。そのメソッドを使用するには、既に名前をアプリにハードコードしておく必要があります。

+0

ねえ、applescriptのチップありがとう!私はいくつかの掘り出し物を見つけた、[私は何をしたいかちょうどかなり正確に行うapplescriptの方法を持っている[この記事](http://hints.macworld.com/article.php?story=20111208191312748)が見つかりました...私はしかし、Objective-cメソッドを探しています。私のアプリにAppleScriptをバンドルすると非常に乱雑になる可能性があります。 – alaroldai

+0

CocoaアプリケーションのappleScriptはあまり問題なく使用できます。[NSAppleScript](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAppleScript_Class/Reference/Reference.html)を参照してください。 )。明らかに、まっすぐなobjcほどうまくはありませんが、純粋なobjcで単純な組み込みのソリューションが見つかるかどうかは分かりません。幸運にも – stonesam92

関連する問題