2017-10-17 23 views
0

私は、アプリケーションのメニューバーツリーのすべてのメニュー項目の名前のリストをすばやく作成したいと考えています。リスト内の項目のプロパティを取得

tell application "System Events" 
    tell first process where name is "Script Editor" 
     set menuContents to entire contents of menu bar 1 
     return name of menuContents 
    end tell 
end tell 

このコードはdocumentationによれば、以下の意味のエラー番号-1728を、スロー。

参照オブジェクトは存在しません。これは、オブジェクトが2つしか存在しない場合に、第3のオブジェクトを参照しようとするときなど、ランタイム解決エラー です。

EDIT:

私は完全にわからないんだけど、entire contentsがそのソースからのUIElementを参照解除するので、問題が発生しているようです。 UIElementsのプロパティは、ポインタによって参照される可能性があります。つまり、参照解除されたUIElementsにはアクセスできません。

+0

このような情報をどのような形式で取得したいのですか? – user3439894

+0

@ user3439894私は、さまざまなアプリケーションのメニュー(およびそのプロパティ)を読むことを実験しています。私はすでに他の方法を使ってうまくやっていますが、 '全体の内容がすべてを取得する速度に比べてかなり遅いです。 – user3225395

答えて

0

あなたはreturn name of menuContentsmenuContentsので、ごコードの文脈で、リストリストオブジェクトnameプロパティを持たないで使用することはできません。 リストオブジェクト

性質は以下のとおりです。classlengthrestreverse

ので、次のいずれかが有効なコマンドです:

return class of menuContents 
return length of menuContents 
return rest of menuContents 
return reverse of menuContents 

要素リストオブジェクトのもの:item

次の例を使用、リストに各itemnameプロパティを取得するには:

set menuNames to {} 
tell application "System Events" 
    tell application process "Script Editor" 
     set menuContents to entire contents of menu bar 1 
     repeat with thisItem in menuContents 
      set end of menuNames to name of thisItem 
     end repeat 
    end tell 
end tell 
return menuNames 

list class referenceそれAppleScript Language Guideを参照してください。

+0

あなたの解決策に見られる問題の1つは、たとえば、「アップル」メニューの「最近のアイテム」メニューに100以上のアイテムがあります。あなたのコードそれらのアイテムのすべてをアイテム化します。あなたのコードは私のシステム上で約600項目のリストを作成しました。私には過度のようです。 – wch1zpink

+0

@ wch1zpink、あなたは完全に私の答えのポイントを失っています。なぜなら、OPの_code_がなぜ失敗したのかを主に示すことと、_eample_をすべての_menu_ _の_name _を取得する方法を示していました。それは厳密に_example_であり、必ずしもコード_またはソリューションであることを意味するものではありません。私は最初にOPとのコメント交換を考えています!それは確かに長いかもしれない枝を残すようにコード化することができましたが、なぜOPの_code_がエラーを投げたのか、そして使用しようとしていたものと同じように '全体の内容 'を使う方法を示しました! – user3439894

+0

これはうまく動作しますが、 '全体の内容 'がメニュー項目を取得する速度がかなり遅くなります。それは、名前を取得するときにシステムイベントに送信するリンゴイベントの数と関係している必要があります。 – user3225395

関連する問題