AppleScript

水曜日に熱出して寝込んだりと、どうも体調がすぐれない。気分も落ち込むし、どうしたもんかね。
今日も、東京ビッグサイトの全国うまいものフェアで行われたミニ・ビールフェスタに行こうかと思っていたのだけれど、今イチ元気が出なくて、結局、今日は外へ一歩も出ていない。
さて、前にちょとだけ書いたけど、今、我が家のリビングのPCはMac miniだ。リビングのPCなので、妻と共用しているわけだが、ここで問題になったのがキーボードの配列。妻は、普通の人なので、日本語配列派なのだが、私はUS配列、しかもCtrlがAの隣(要は、昔のUNIXワークステーションの配列)派。Ctrlキーについては、妻もCapsLockは普段使わないそうなので、Ctrlに変更*1。妻にUS配列を強制するわけにもいかないので、私が妥協して日本語配列を使ったり、気が向いたら、「システム環境設定」の「キーボードとマウス」の「キーボードの種類の変更」を手動で書き換えたりしていた。

しかし、毎度それをやるのも正直面倒。そこで、重い腰を上げて、AppleScriptを勉強して、この作業の自動化にチャレンジしてみた。

さて、そのAppleScriptの、このような、GUIに対する操作はUI Scripting http://www.apple.com/applescript/uiscripting/ とか言うらしい。サンプルスクリプトも幾つかあり、眺めていたら、まぁ、何となく雰囲気は掴めた。昔のHyperCardのHyperScriptみたいな感じなのね。
操作する対象のUIオブジェクトを見つけるためには、AppleのサイトにあるUIElementInspector.app http://developer.apple.com/samplecode/UIElementInspector/index.html を使うと良いらしい。が、これだと、"group"オブジェクトの関係とかが良く分からないようだ。
どうも、Example Scripts にあるProbe Window.applescriptに書いてあるように、地道にget every UI elementするのが良さそうだ。

さて、出来たスクリプトを一応書いておく。詳しい方のツッコミ希望。


tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.keyboard"
end tell
tell application "System Events"
tell process "System Preferences"
click button 3 of tab group 1 of window 1
end tell
end tell

tell application "System Events"
tell process "KeyboardSetupAssistant"
-- click button "続ける" of window "キーボード設定アシスタント"
delay 0.1
click button "続ける" of window 1
delay 0.1
keystroke "z"
keystroke "/_/"
click button "OK" of sheet 1 of window 1
delay 0.1
-- click radio button 3 of radio group 1 of group 1 of window "キーボード設定アシスタント"
click radio button 3 of radio group 1 of group 1 of window 1
delay 0.1
-- click button "完了" of window "キーボード設定アシスタント"
click button "完了" of window 1
keystroke "q" using command down
end tell
end tell

*1:Mac OS Xは標準でこういうことが出来るのが素晴らしい。Windowsレジストリ書き換えなくても変更できるようにすれば良いのに。(Vistaになって変わったかな?)