AppleScript
AppleScriptでシステムの上部メニューを選択する

はじめに

自動化作業の一部にApplesScriptを使用していて、よく使うやつをまとめていこうかと思う。今回は画面上部のメニューを選択するスクリプト

まず、メニューの要素を調べる

メニューの要素を調べるには、以下のようなAppleScriptを実行する


tell application "System Events"
	
	tell process "SystemUIServer"
		
		menu bar 1's menu bar items's attribute "AXDescription"'s value
		
	end tell
	
end tell

すると、結果にメニューの要素が表示される。

これはあとで使うのでメモっておく

指定したメニューを選択する

今回は、例として「入力メニュー(text input)」を選択して、入力モードを日本語IMの「カタカナ」に指定する動作をしてみる


tell application "System Events"
	tell process "SystemUIServer"
		set num to 0
		set one to menu bar 1's menu bar items's attribute "AXDescription"'s value
		repeat with two in one
			set tt to two as text
			set num to num + 1
			if tt = "text input" then
				set num2 to num
			end if	
		end repeat
		
		click menu bar item num2 of menu bar 1
		click menu item "カタカナ" of menu 1 of menu bar item num2 of menu bar 1
	end tell
end tell

適当な名前だけれどもnumは、選択したいメニューを調べるための変数、oneは、メニューのアイテム要素を変数に入れている。


set num to 0
set one to menu bar 1's menu bar items's attribute "AXDescription"'s value

次に、選択したいメニューがリストの何番目にあるのかを調べる。今回は「入力メニュー(text input)」を調べたいので、if = tt "調べたい要素" に"text input"を入れている。


repeat with two in one
	set tt to two as text
	set num to num + 1
	if tt = "text input" then
		set num2 to num
	end if	
end repeat

ヒットした順番をnum2に格納して、クリック動作を指定させる。menu bar 1 はシステムの上部メニューのこと。1回目のクリックでメニューを表示させ、2回目のクリックで入力メニューから指定したIMの入力モードを選択している。


click menu bar item num2 of menu bar 1
click menu item "カタカナ" of menu 1 of menu bar item num2 of menu bar 1

menu bar item を指定するときに num2 を使っているのは、menu bar item を文字指定しても動かないから。(指定の仕方が違うのかもしれないが)入力メニューの一覧から入力モードを指定する場合は、リストで表示されている文字列で指定できるので、"カタカナ"としている。ちなみに数字でも指定できる。

ただ、数字で指定した場合、入力メニューの場合はインプットメソッドの入れ替えやOSのアップデートで順番が入れ替わったりすることがあるので、どの環境でもスクリプトを動かしたい場合は、文字列で指定したほうがいいかもしれない。

一つのインプットメソッドしか使っていないのであれば、キーボードのエミュレートだけでできると思うが、インプットメソッドアプリを切り替えたいときなどにはこのスクリプトがいいかなと思う。