キーボード配列変更(qwerty, Dvorak)をApplescriptでGUIスクリプティングを用いて自動化する。


はじめに

Macはデスクトップ上で行っている作業のほとんどをAppleScriptで自動化できる。AppleScriptをサポートしていないアプリケーションや特定の操作でも、GUIスクリプティングを用いれば、AppleScriptで自動化できる。

 GUIスクリプティングを用いて、キーボードの配列を変更した。あまり需要はないと思うが、他で見かけないので記事にした。

環境

macOS ver11.3
AppleScript 2.7

準備

 キーボードの配列変更を手作業(マウス操作)で行うときは、"システム環境設定" -> "キーボード" -> "入力ソース" -> "英字のレイアウト" と進み、ポップアップメニューから"ABC (qwerty配列)"、"Dvorak"、その他を選ぶ。
 この手作業を自動化する。

コード

 最初にdisplay dialogで"abc (qwerty)"、"Dvorak"、"キャンセル"を選ぶ。
 "キャンセル"を選択した場合、そこでプログラムが中断される。

qwerty_or_Dvorak
tell application "System Events"
    display dialog "選択してください" buttons {"ABC", "Dvorak", "キャンセル"} cancel button "キャンセル"
    set theKeyMap to button returned of result
    tell application "System Preferences" to quit
    delay 1
    tell application "System Preferences" to activate
    tell application process "System Preferences"
        repeat
            if exists (window "システム環境設定") then
                exit repeat
            end if
        end repeat
    end tell
    tell button "キーボード" of scroll area 1 of window "システム環境設定" of application process "System Preferences" to click
    tell application process "System Preferences"
        repeat
            if exists (window "キーボード") then
                exit repeat
            end if
        end repeat
    end tell
    tell radio button "入力ソース" of tab group 1 of window "キーボード" of application process "System Preferences" to click
    tell pop up button 6 of scroll area 2 of splitter group 1 of group 2 of tab group 1 of window "キーボード" of application process "System Preferences" to click


    if (theKeyMap is "ABC") then
        tell menu item "ABC" of menu 1 of pop up button 6 of scroll area 2 of splitter group 1 of group 2 of tab group 1 of window "キーボード" of application process "System Preferences" to click
    else
        tell menu item "Dvorak" of menu 1 of pop up button 6 of scroll area 2 of splitter group 1 of group 2 of tab group 1 of window "キーボード" of application process "System Preferences" to click
    end if

end tell

以下は実際に動作させたgif動画

 "ABC"を選択した場合、"Dvorak"を選択した場合、"キャンセル"を選択した場合を順に行っている。

考察

 GUIスクリプティングのコードは、OSのアップデートなどでGUIが変わると動かなくなることがある。

 GUIスクリプトを行うのには、GUI部品の階層構造を調べる必要がある。その方法は、他のwebページで多数解説があるが、各層毎にevery UI elementを利用して部品を調べ、総当たり的に調べる方法であり、かなり手間がかかる。実際には慣れてくると、部品の名前を見ればだいたい予想がつくようになるが、それでも手間が相当かかる。

 さらに、GUIボタンをクリックすると新しいウィンドウが出現するような、動的にGUI部品が変化する場合もあり、この場合もGUI部品の解析にはかなり手間がかがる。

 上記にて、UI部品の一覧を取得し、目的の部品に一気に到達できるような方法が望ましい。それはまた別の機会に述べることにする。