Mac OS X v10.3 のAppleScript でサポートされた新しい機能に“GUI Scripting (UI element scripting)”があります。つまり、アップルスクリプトによりGUI操作することができちゃうのです。なんかすごいですね!簡単な使い方をサンプルを交えてご紹介しましょう。
※ Mac OS X 10.3.2 で動作確認しています。10.3.1 以前ではうまく動かないかもしれません。
サンプルを利用して試してみよう!
AppleScript を体験するのに、一番手っ取り早い方法は“サンプルを動かしてみる”ことです。/ライブラリ/Scripts/UI Element Scripts にいくつかサンプルがあるので、 その中から Probe Menu Bar.applescript を開いてみてください。
このサンプルを読み込んだら、“スクリプトエディタ”で 実行 ボタンをクリックしてみましょう。最初は“システム環境設定”のユニバーサルアクセス が開いて、以下のメッセージがでます。これは、「UI Eelement scripting は 無効になっています。“補助装置にアクセスできるようにする”を ON にしてね」という意味です。早速 チェックをONにしましょう。
↓ ↓
設定が終わったら同じスクリプトをもう一度実行します。こんどはスクリプトエディタの“結果”に文字がたくさん現れました。
このスクリプトは何をするものか?というと、Finder のすべてのメニューアイテムを取得するものです。この結果を応用すれば、メニューを簡単に操作できます。次のページでその方法を解説します。
サンプルを応用してメニューを操作
先ほどの実行結果を利用して Appleメニュー - Dock の「自動的に隠す機能を入にする」のメニューアイテムを動かしてみましょう。実行結果の以下の範囲をコピーしてください。
スクリプトエディタで、ファイル - 新規 を選び、新しい編集ウインドウを開いて先ほどのテキストをペーストしてください。その先頭に「pick」と入力し、“System Events" の tell ブロック※1 で、これまでのテキストを囲みます。最後に、“Finder を最前面にする”記述を全体の先頭に追加します。
※1 tell ブロックとは tell ~ と書かれた部分から、end tell までの範囲を示します。
tell application "Finder" activate end tell
tell application "System Events"
pick (menu item "“自動的に隠す”機能を入にする" of menu "Dock" of menu item "Dock" of menu "Apple" of menu bar item "Apple" of menu bar 1 ofapplication process "Finder")
end tell |
さて、これを実行すると・・・Finder に切り替わって Dock が 格納されましたね!
キーボードショートカット操作を動かす
メニュー操作を実行するためには、対象となるアプリケーション(Finder など)をアクティブ(最前面にする)にしないと利用できないため、Apple メニュー のような全体で利用できるメニュー操作をする場合には、ちょっと不便です。
では、キーボードショートカットで Dock を操作してみましょう。これならば、どのようなアプリケーションが最前面だったとしても、機能するはずです。
サンプルから、「Key Down-Up.applescript」を開いてみてください。
今度は、この中の一部を利用します。以下の範囲でコピーしてください。
次に、新しいウインドウにペーストして、shift を すべて command に変更し、"p" を "d" に書き換えます。そして、“System Events”の tell ブロックで囲めば完成。以下のようになりました。
・・・実行するたびに、Dock が隠れたり、出たりしますね!キーストローク操作は、これらの応用でいろいろ使えそうです。
マウスボタンを押す
ほかにもマウスボタンを押す操作を「click」命令により実行できます。click の対象となる部品を調べる方法はサンプルの「Probe Window.applescript」にヒントがあります。このスクリプトのなかから取得したいアイテムが書かれている行だけを取り出して、さらに“イベントログ”を利用して実行履歴を表示させ、利用できるボタンの情報を取得します。
【実行例】
※以下のウインドウのボタンを調べます。
この Finder ウインドウが最前面に開いている状態で以下のスクリプトを実行。
tell application "System Events" tell process "Finder" tell window 1 get every button end tell end tell end tell |
↓ ↓
(イベントログの結果)
tell application "System Events" get every button of window 1of process "Finder" {button 1 of window"tess" of application process "Finder", button 2 of window "tess" ofapplication process "Finder" , button3 of window "tess" of application process "Finder" , button 4 ofwindow "tess" of application process"Finder" } end tell |
この結果により、window 1 に button が 1 ~ 4 あることがわかります。
1 は ツールバーを表示するボタン、
2は緑
3は黄色
4は赤
のボタンです。
button 1 の情報をみるには・・
tell application "System Events" tell process "Finder" tell window 1 propertiesof button 1 end tell end tell end tell |
button 1 を押すためには・・・
tell application "Finder" activate end tell tell application "System Events" tell process "Finder" tell window 1 click button1 end tell end tell end tell |
※ メニューの場合と同様に、対象アプリを最前面に
移動する必要があります。
あとはトライ&エラーあるのみ!
基本的な作り方は以上です。これらを応用すれば、もっともっといろんな使い方ができそうですね!
いままで紹介したスクリプトの「 tell process "Finder" 」の"Finder" を操作したいアプリケーションの名前に置き換えれば、そのアプリケーションのメニューやボタンが操作できるようになるでしょう。
関連リンク:
AppleScript (アップルジャパン のサイトですが、情報が古いです)
AppleScript in Mac OS X (Apple 米国のサイトです、最新情報はこちら)
AppleScript 関連リンク集 from All About Japan(リンク集です)