入力ソースを切り替える(MacOS12.x版) [AppleScript辞書はつくれるか?]
以前にも言語切り替えの入力メニューをApplescriptから操作するスクリプトを組んでいました。
『システムイベントを使って入力モードを変更する』 > https://start-mac.blog.ss-blog.jp/2019-03-27
Mac OS 10.13では今でも使えているのですが、現在のMac OS 12.4では使えなくなっていましたので、新しいものを考えてみます。
概要
MacOS 12.x環境で、Applescriptを使って入力ソースを『日本語』に変更したい
Contents
1)ショートカットがあれば疑似入力でできるのでは?
2)キーボードについている『かな』キーを擬似的に押した状態を作ったら?
3)メニューを擬似クリックしてみる
4)メニューを座標でクリック
5)入力ソースをキーボードショートカットで変更する
1)ショートカット入力で切り替える
仕方がないのでSystem Events経由でショートカットの疑似入力に変更しようかと思ったのですが、
公式サイトに書いてあるやり方
(https://support.apple.com/ja-jp/guide/japanese-input-method/jpimf6ffb247/6.3/mac/12.0)
『キーボード: Control+Shift+Jキー、またはOption+Shift+Zキーを押す』とあるのですが、なぜかこれでは動かなかった。
2)キーボードについている『かな』キーを擬似的に押した状態を作る
キーの番号を調べれば使えるかもしれないが、ふと思いました。
キーボード配列が変わってしまったら使えなくなるのでは?
この方法では環境によっては誤動作の原因になる可能性があるのでボツ。
3)システムイベントでメニューのクリックしてみる
どうやら"SystemUIServer"ではなく、"TextInputMenuAgent"にかわっているようだったので、変更した。
click menu bar item を利用して直接に擬似クリックしてみる。
|
tell application "System Events" tell process "TextInputMenuAgent" click menu item "日本語" of menu 1 of menu bar item 1 of menu bar 2 -- ※ end tell end tell |
※ 右から menu bar 2(デスクトップ上部のメニュー右側)
menu bar item 1(メニューバー本体のアイテム)
menu 1(メニューバーの一つ目のメニューアイテムグループ(まぁ、一つしかないのだが...))
menu item "日本語"(メニューアイテムの中の一つ)
となる。
結果は、動作しなかった。
どうやら、メニューアイテムグループを表示してからでないと反応しないらしい。
なので、追加してみた。
|
tell application "System Events" tell process "TextInputMenuAgent" click menu bar item 1 of menu bar 2 click menu item "日本語" of menu 1 of menu bar item 1 of menu bar 2 end tell end tell |
これで動作はしたのだが、何と動作が終わるまでに6秒もかかってしまった。(なぜ?)
4)座標でクリックしてみる
クリックメニューバー命令が時間がかかるのか?と考え、座標を求めクリックしてみることにした。
|
tell application "System Events" tell process "TextInputMenuAgent" set {x, y} to position of menu bar item 1 of menu bar 2 click at {x + 8, 5} set aList to every UI element of menu 1 of menu bar item 1 of menu bar 2 repeat with lineNo from 1 to (count of aList) set obj to item lineNo of aList set aName to (name of obj) as string if aName = "日本語" then set {x, y} to position of obj click at {x + 50, y + 8} exit repeat end if end repeat end tell end tell |
これでも動作したのだが、やはり6秒もの時間がかかった。(残念!)
メニューバーのアイコンをクリックした後に、瞬時にメニューは表示されているのだけれど、
そこで6秒間ほど動きがピタッと止まってしまう。(原因不明)
5)キーボードショートカットで入力ソースを切り替える方法でやってみる
MacOS12.xではキーボードショートカット『control + スペース』で入力ソースの切り替えができる。
何だ、最初からこれでやればいいのでは? と思ったかもしれないが、じつはこのショートカットでは、切り替えた先の入力ソースが『日本語』なのか違うのかの判断ができないのです。
それを判断するためにTextInputMenuAgentのメニュー項目を読み込む必要があるのです。
入力ソースが『日本語』であるかどうかはメニューの中に日本語ソースに存在する「再変換」の項目があるかどうかで判断しています。
(中国語や韓国語など他のソースにあるかは調べていません。(すまん。)少なくとも英語には無い。)
|
tell application "System Events" tell process "TextInputMenuAgent" set aList to name of UI elements of menu 1 of menu bar item 1 of menu bar 2 if not ((aList as text) contains "再変換") then key code 49 using control down end if end tell end tell |
日本語になっていなければ、key code 49 using control downを実行します。
この時、なぜkeystroke " " using control downの直接半角スペース文字を直接入力する方法を取らず、キーコードを使用したのかというと、キーストローク命令ではスペースはバグるので、使用しませんでした。(原因は不明)
※キーコードに関しては(サイト:https://eastmanreference.com/complete-list-of-applescript-key-codes)を参考にしました。
人によっては入力ソースが英語[ABC]と日本語ではない3つ以上の入力ソースがある人もいますが、それには対応していません。
メニューアイテムグループの内容が開かないと更新されないみたいで、それをしようとすると、魔の6秒間のフリーズが発生してしまうので、これは今後の課題とします。
コメント 0