最終更新日:2010/10/26

UIElementAction

10.6.xで動作テストしてます。

これは何?

座標を指定するとそこにあるボタン等のGUIパーツを取得できるAPIがあります。それで指定したGUIパーツが無いか画面の隅から隅まで探してアクションを行うアプリケーションです。

欠点

利点

ダウンロード

  1. UIElementActionVer8.1.zip(64bitバイナリは無しにした。AppleScriptを取得する時に対象のエレメントを指定できるようにした。)
  2. UIElementActionVer8.zip(10.6.3で修飾キーを押しながらクリックができなくなったのを修正(参考にしたページ)。サンプルスクリプトのクリック指定方法が修正されていなかったのを修正。)
  3. UIElementActionVer7.zip(clickの属性設定方法を変更。getAttrに'AppleScript'を指定すると対象のエレメントを指定するAppleScriptを取得できるようなった。)
  4. UIElementActionVer6.1.zip(AXSizeなどを設定できないバグとgetAttrでエラーになるバグを修正)
  5. UIElementActionVer6.zip(親エレメントを指定できるようにした)
  6. UIElementActionVer5.zip
  7. UIElementActionVer4.zip(探すエレメントのprocessを指定できるようにした。)
  8. UIElementActionVer3.zip
  9. UIElementActionVer2.1.zip
  10. UIElementActionVer2.zip
  11. UIElementActionVer1.zip

サンプルAppleScript

以下のようなスクリプトでボタンやメニューを操作できます。clickMenuなどはUIElementActionを使いやすくしたハンドラです。

-- メニューのクリック
my clickMenu("AppleScript エディタ", {})
my clickMenu("AppleScript エディタについて", {})


-- システム環境設定のサウンドの設定を適当に変更
-- グループとかを指定する必要がなく名前だけで設定できます。
my clickButton("サウンド", {})
my clickButton("出力", {})
my setCheckBoxValue("メニューバーに音量を表示", "1", {})
my setSliderValue("バランス:", "right", "0.2", {})
my setSliderValue("主音量:", "right", "0.1", {})


-- Safariでグーグルの検索結果の検索ツールをクリックして、1年以内にする
-- Safariの場合Webページの内容にもいろいろとアクセスできます。
my clickStaticText("検索ツールを表示", {inLoop:"y"})
delay 0.5
my clickStaticText("1 年以内", {inLoop:"y"})


-- Safariで表示中のjpg画像をコンテキストメニューからiPhotoに追加
-- コンテキストメニューの表示、選択も簡単にできます。
my UIElementAction({checkArea:"window", checkSpaceX:15, checkSpaceY:15, attr1:"AXRole", value1:"AXImage", attr2:"AXURL", value2:".jpg$", match2:"regex", action:"AXShowMenu"})
my clickMenu("イメージを iPhoto ライブラリに追加", {process:"Safari", checkSpaceX:40, checkSpaceY:15})


-- smcFanControlのアップデートを調べる
-- アプリケーション独自のメニューバー項目ですが操作できます。
-- AXPressだと押せるけどエラーになるのでclickで押す
my UIElementAction({process:"smcFanControl", checkArea:"screen", startPosition:"topRight", checkSpaceX:-20, checkSpaceY:15, attr1:"AXRole", value1:"AXButton", action:"click"})
my clickMenu("Info", {process:"smcFanControl", startPosition:"topRight", checkSpaceX:-100, checkSpaceY:15})
my clickMenu("Check for updates", {process:"smcFanControl", startPosition:"topRight", checkSpaceX:-100, checkSpaceY:15})

Accessibility Inspectorの画面

Accessibility Inspectorを使うと指定したいエレメントの情報が簡単にわかります。必須です。

UIElementInspectorもほぼ同じです。

メモ

UIElementActionを使ってできたもの

CopyGUIScriptForUIElementUnderMouse(旧名:CopySpecifyUIElementScript)

UIElementActionを使ってGUIスクリプティングで使える特定のオブジェクトを指定するAppleScriptをクリップボードにコピーします。

所得できない場合もありますが下記サンプルのように割といろいろ取得できます。また、取得できてもAppleScriptが動かない場合があります。例えばsmcFanControlのメニューバー項目がそれにあたります。

Automatorでの結果と(ほぼ)同じだと思います。

例:サウンドのバランスを変更します

tell application "System Events"
tell slider 1 of group 1 of tab group 1 of window "サウンド" of process "システム環境設定"
set value to 0
end tell
end tell

自分の環境のSafariのGoogle検索ボックスは下記のようになります。

tell application "System Events"
tell item 1 of (every text field whose value of attribute "AXDescription" is "Google") of splitter group 1 of group 2 of tool bar 1 of window 1 of process "Safari"
set value to "カレーの作り方"
end tell
end tell

SafariでGoogleの検索オプションをクリックするスクリプトは下記のようになります。

tell application "System Events"
tell static text 1 of UI element "検索オプション" of group 4 of UI element 1 of scroll area 1 of group 3 of window "カレーの作り方 - Google 検索" of process "Safari"
click
end tell
end tell

メニューバー項目の音量設定項目は下記のようになります。

tell application "System Events"
tell item 1 of (every menu bar item whose value of attribute "AXDescription" is "システムサウンド音量") of menu bar 1 of process "SystemUIServer"
end tell
end tell

ダウンロード

  1. CopyGUIScriptForUIElementUnderMouseVer1.1.zip(名前変更。中のUIElementActionを更新)
  2. CopySpecifyUIElementScriptVer1.0.zip

使い方

アプリケーションを起動するとカウントダウンが始まり0になった時のマウスの下にあるUI Elementを指定するスクリプトがクリップボードにコピーされます。カウントダウンが0の時にコマンドキー、シフトキー、オプションキー、コントロールキーのどれかを押していると、UI Elementの指定方法が常にインデックス指定になります。通常は名前、AXDescription、両方無ければインデックスになっています。

UIElementActionはアプリケーション内部にあります。

CloseWindowUnderMouse

マウスの下のウインドウを閉じることができます。エクスポゼで縮小して並んだウインドウでも動作するのでエクスポゼ中にウインドウを閉じるのに使うことができます。ButlerなどでキーボードショートカットでCloseWindowUnderMouseを起動するようにして使います。

何かのソフトでこの機能を見かけたのですがUIElementActionを使えばできそうなのでやってみました。

ダウンロード

  1. CloseWindowUnderMouseVer1.0.zip