システム環境設定(System Preferences.app)で指定のpaneを表示するAppleScriptです。
まず、どのpaneを表示するかを決める前に、AppleScriptからどのようなpaneが、どのように見えるのかを確認しておかなければなりません。IDや名称などはOSのバージョンが上がると変更になることもあるからです(あとは、AppleがOSのアップデータで新たにバグを作って、それに影響を受けるとか)。
まずは、最低でもAppleScriptエディタ(Mac OS X 10.5まではスクリプトエディタ)で、システム環境設定のAppleScript用語辞書ぐらいは調べておく必要があります。
AppleScriptエディタにシステム環境設定のアイコンをドラッグ&ドロップすると、システム環境設定の用語内容を確認できます。

paneを変更するのであれば、当然「pane」にどのようにアクセスできるかは知っておかなくてはなりません。

id、localized name、nameあたりを調べてみましょう。
| スクリプト名:システム環境設定ですべてのpaneのIDを取得する |
tell application “System Preferences” set pList to id of every pane end tell
–> {”com.avatron.AirDisplayPrefPanel”, “com.apple.preferences.Bluetooth”, “com.apple.preference.digihub.discs”, “com.divx.divxprefs”, “com.apple.preference.dock”, “com.apple.preference.expose”, “net.telestream.wmv.prefpane”, “com.growl.prefpanel”, “com.google.MacFUSE”, “com.apple.preference.internet”, “org.perian.PerianPane”, “com.ecamm.printopia”, “com.spanningsync.prefPane”, “com.apple.preference.spotlight”, “com.apple.prefs.backup”, “com.apple.preferences.users”, “com.apple.preference.general”, “com.apple.preference.keyboard”, “com.apple.preference.sound”, “com.apple.preference.speech”, “com.apple.preference.security”, “com.apple.preferences.softwareupdate”, “com.apple.preference.displays”, “com.apple.preference.desktopscreeneffect”, “com.apple.preference.trackpad”, “com.apple.preference.network”, “com.apple.preference.printfax”, “com.apple.preferences.parentalcontrols”, “com.apple.preference.mouse”, “com.apple.preference.universalaccess”, “com.apple.preference.startupdisk”, “com.apple.preferences.sharing”, “com.apple.Localization”, “com.apple.preference.energysaver”, “com.apple.preference.datetime”} |
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|
| スクリプト名:システム環境設定ですべてのpaneのlocalized nameを取得する |
tell application “System Preferences” set pList to localized name of every pane end tell
–> {”Air Display”, “Bluetooth”, “CD と DVD”, “DivX”, “Dock”, “Exposé と Spaces”, “Flip4Mac WMV”, “Growl”, “MacFUSE”, “MobileMe”, “Perian”, “Printopia”, “Spanning Sync”, “Spotlight”, “Time Machine”, “アカウント”, “アピアランス”, “キーボード”, “サウンド”, “スピーチ”, “セキュリティ”, “ソフトウェア・アップデート”, “ディスプレイ”, “デスクトップとスクリーンセーバ”, “トラックパッド”, “ネットワーク”, “プリントとファクス”, “ペアレンタルコントロール”, “マウス”, “ユニバーサルアクセス”, “起動ディスク”, “共有”, “言語とテキスト”, “省エネルギー”, “日付と時刻”} |
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|
| スクリプト名:システム環境設定ですべてのpaneのnameを取得する |
tell application “System Preferences” set pList to name of every pane end tell
–> (* {”Air Display”, “Bluetooth”, “CD と DVD”, “DivX”, “Dock”, “Exposé と Spaces”, “Flip4Mac WMV”, “Growl”, “MacFUSE”, “MobileMe”, “Perian”, “Printopia”, “Spanning Sync”, “Spotlight”, “Time Machine”, “アカウント”, “アピアランス”, “キーボード”, “サウンド”, “スピーチ”, “セキュリティ”, “ソフトウェア アップデート”, “ディスプレイ”, “デスクトップと スクリーンセーバ”, “トラックパッド”, “ネットワーク”, “プリントと ファクス”, “ペアレンタル コントロール”, “マウス”, “ユニバーサル アクセス”, “起動ディスク”, “共有”, “言語とテキスト”, “省エネルギー”, “日付と時刻”} *) |
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|
と、こんな感じです。
……nameのあたりに微妙にバグっぽい実装が見られます。
Apple純正のpreferences paneがおそらく英語名称が返ってくるであろうnameでlocalized nameを返してきています。日本語ローカライズした担当が「しなくていいところまで日本語ローカライズ化」したためと思われます。おそらく、置換コマンドか何かで機械的に置き換えたんでしょう。この仕事をした担当者は相当使えない人間です。
Appleのどの担当者がどういうヘマをやらかすか認識した上で、「paneの指定にnameは使わないほうがよさそうだ。どうせ後でしれっと直すかもしれない」と考えます。
localized nameだと、英語やフランス語など別の言語環境で実行したときに動かなくなるので、ここは消去法で無難に「ID」で指定しておいたほうがよさそうです。
では、ひととおりのpaneのidをリストアップして、希望のpaneを表示状態にできるかどうか確認してみましょう。
| スクリプト名:システム環境設定で指定のpaneを表示する |
tell application “System Preferences” activate set pList to id of every pane set pRes to choose from list pList set pItem to first item of pRes set current pane to pane pItem end tell |
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|

選択したpaneを表示できたでしょうか? どうせAppleのやることなので、連中はすべての機能をチェックなどしていません。とりあえずすべてのpaneが選択できるか確認しておく必要があります。
そこまで調べて、最後に希望のpaneのIDを指定して表示状態にできるというわけです。
| スクリプト名:システム環境設定で「日付と時刻」paneを表示状態にする |
tell application “System Preferences” activate set current pane to pane “com.apple.preference.datetime” end tell |
|
▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に
|
一見、何も工夫も努力もしていないかのように見える3行ぐらいのコードのために、そのぐらいの調査はしています。
アマチュアレベルで、自分の場所でいまのバージョンのOS上だけで動くコードならこのレベルでよいのですが、コードを配布して多くのユーザーに使ってほしいと考えた場合には、希望のpaneの名称を文字列で持っておいて、localized nameの一覧とその文字列を照合し、合致したらそのpaneのIDを取得して表示……というところまでやっておく必要があるでしょう。
システム環境設定のAppleScript用語辞書を見ていたら、paneの下のところにあるtype difinitionで……

こんなものを見つけました。作業途中に付けておいたのかもしれませんが、AppleScript用語辞書をエンジニア同士の文通欄にしてほしくないものです。「????」なんて、インターンの学生が分からなくて付けておいたメモぐらいにしか見えないのですが……つくづくAppleのチェックはザルだと思うものです。