5

10.7.4 OSX Lion Applescript

クリップボードにコピーして別のアプリに送信したい静的テキスト要素を持つアプリケーション(社内で構築され、Applescript辞書がない)を使用していますが、動作させるのに苦労しています。

要素をターゲットにするために使用していたスクリプトは次のようになりました。

Tell application "System Events" to set frontmost of process "*application*" to true
Tell application "System Events"
    Tell process "*application*" 
        Tell static text 1 of tab view 1 scroll area 1 of splitter group 1 of splitter group 1 of splitter group 1 of window 1
            keystroke "a" using command down
            delay 0.1
            keystroke "c" using command down
            delay 0.1
        end tell
    end tell
end tell
end tell

アプリケーションの別の場所をクリックするたびに、間違った要素からの間違ったテキストがクリップボードにコピーされていました(多数のテキストフィールドがあります)。

UI Accessor / Accessibility Accessorで、アプリケーションの各UI要素にマウスを合わせると一意のAXIdentifier値があることに気付きました。

AXIdentifier値を使用してその要素をターゲットにし、そこからテキストをコピーして、私がやろうとしていることを達成する方法はありますか?

すべての助けに感謝しますこれは私の最初の投稿であり、それが価値があることを願っています!〜TheLarkInn

4

3 に答える 3

4

これは、AppleScriptのフィルタリングを使用して行うことができます。たとえば、Apple Mailのメッセージ作成ウィンドウで[差出人:]ポップアップメニューを表示するために、一致させることができるアクセシビリティの説明はありませんが、次のように一致させることができる一意のAXIdentifierがあります。

tell application "System Events"
    tell application process "Mail"
        tell window 1
            get first pop up button whose value of attribute "AXIdentifier" is "popup_from"
        end tell
    end tell
end tell

これは、1つのAppleイベントをシステムイベントに送信するだけなので、AppleScriptでループするよりも効率的です。

于 2016-04-23T16:38:43.520 に答える
3

あなたがやろうとしていることを直接行う方法はないと思います。セレクターを介して要素のハンドルを取得した場合にのみ、属性にアクセスできるようです。これは、すべてのUI要素を反復処理することで要求していることを実行する非常に醜いソリューションですが、UIが大きくなると非常に遅くなり、本番レベルのコードにはおそらく理想的ではありません。

tell application "System Events"
  tell process "Some Process"
    set tElements to entire contents of window "Some Window"
    repeat with tElement in tElements
      if (exists attribute "AXIdentifier" of tElement) then
        if value of attribute "AXIdentifier" of tElement = "Some AXIdentifier" then set tText to value of tElement
      end if
    end repeat
  end tell
end tell
tText

XcodeのUIElementInspectorまたはAccessibilityInspectorを使用してセレクター文字列を作成するのが良い方法だと思います。

于 2013-05-09T21:12:22.370 に答える
0
Tell application "*application*" to activate

Tell application "System Events"
    Tell application process "*application*" 
        set textStaticTextValue to value of static text 1 of tab view 1 scroll area 1 of splitter group 1 of splitter group 1 of splitter group 1 of window 1
    end tell
end tell
于 2012-10-01T03:25:41.107 に答える