スクリーンセーバとかの設定をAutomatorにがんばってもらう、のつづき（バージョン２）

# これまでの経緯

- Automatorでミニアプリをつくり、スクリーンセーバや画面OFFの設定を切替えられるようにした

[Quiita|macOSでプロジェクタを繋ぐたびにスクリーンセーバとかの設定をいちいちしなくて済むようAutomatorにがんばってもらうことにした](https://qiita.com/hann-solo/items/d709f6796c830038ae99)

# 何に困っていたかというと

- macOS Catalinaになってから、前のコードが上手く動かなくなった
- スクリーンセーバの分数を選ぶところがうまくいかなくなった（UIエレメントの名前が変わったらしい）

# やったこと：基本的な方針

- UIエレメントの名前を変更
- ついでに、コメントアウトしていた古いコード削除
- ついでに、delayが長すぎるところを短縮（全体の動きも早くなった）

# コード：全体

~~~AppleScript
on run {input, parameters}
	
	set projectorMode to false --仮にプロジェクタモードをオフとする
	
	--
	--システム環境設定が開いていたら閉じる
	--
	
	if application "System Preferences" is running then
		tell application "System Preferences" to quit
		delay 0.5 --直ぐに次の動作をするとエラーとなるので待つ
	end if
	
	--
	--まず省エネルギーを切り替える
	--
	
	tell application "System Preferences"
		--"電源アダプタ"タブを開く
		reveal anchor "Options" of pane id "com.apple.preference.energysaver"
		activate
	end tell
	
	
	tell application "System Events"
		if UI elements enabled then
			
			tell application "System Events"
				tell process "System Preferences"
					
					--"電源アダプタ"ラジオボタンを押す
					click radio button "電源アダプタ" of tab group 1 of window "省エネルギー"
					delay 0.1
					
					--30分未満なら projectorModeをオンにする（プロジェクタモード）
					if value of slider 1 of tab group 1 of window "省エネルギー" < 270 then set projectorMode to true
					
					if projectorMode then
						--プロジェクタモードなら
						--スライダ値を62分ぐらいに
						set value of slider 1 of tab group 1 of window "省エネルギー" to 550
						--値が保存されないので、キーを使ってスライダを動かす
						delay 0.1
						keystroke tab
						delay 0.1
						keystroke tab
						delay 0.1
						keystroke (ASCII character 28) --左矢印
						delay 0.1 --アラートが出るまで少し時間がかかるので待つ
						keystroke return --アラートに対しOK（return）
					else
						--プロジェクタモードではないなら
						--"デフォルトに戻す"ボタンを押す
						click button "デフォルトに戻す" of tab group 1 of window "省エネルギー"
					end if
					
					--"バッテリー"ラジオボタンを押す
					click radio button "バッテリー" of tab group 1 of window "省エネルギー"
					delay 0.1
					
					if projectorMode then
						--プロジェクタモードなら
						--スライダ値を62分ぐらいに
						set value of slider 1 of tab group 1 of window "省エネルギー" to 550
						--値が保存されないので、キーを使ってスライダを動かす
						delay 0.1
						keystroke (ASCII character 28) --左矢印
						delay 0.1
						keystroke return
					else
						--プロジェクタモードではないなら
						--"デフォルトに戻す"ボタンを押す
						click button "デフォルトに戻す" of tab group 1 of window "省エネルギー"
					end if
					
				end tell
			end tell
			
		else
			
			tell application "System Preferences"
				activate
				set current pane to pane "com.apple.preference.universalaccess"
				display dialog "UI element scripting is not enabled."
			end tell
		end if
	end tell
	
	
	--
	--次にスクリーンセーバを切り替える
	--
	
	tell application "System Preferences"
		reveal anchor "DesktopPref" of pane id "com.apple.preference.desktopscreeneffect"
		activate
		delay 0.5 --paneが切り替わるまで時間かかるので待つ
	end tell
	
	tell application "System Events"
		if UI elements enabled then
			
			tell application "System Events"
				tell process "System Preferences"
					--"スクリーンセーバ"ボタンを押す
					click radio button "スクリーンセーバ" of tab group 1 of window 1
					delay 0.1 --ラジオボタン押してから切り替わるまで時間かかるので待つ
					
					if projectorMode then
						--プロジェクタモードなら"30分"を選ぶ
						tell pop up button 1 of tab group 1 of window 1
							click
							delay 0.1
							click menu item "30分" of menu 1
						end tell
					else
						--プロジェクタモードでないなら"2分"を選ぶ
						tell pop up button 1 of tab group 1 of window 1
							click
							delay 0.1
							click menu item "2分" of menu 1
						end tell
					end if
					
				end tell
			end tell
			
		else
			
			tell application "System Preferences"
				activate
				set current pane to pane "com.apple.preference.universalaccess"
				display dialog "UI element scripting is not enabled."
			end tell
		end if
	end tell
	
	
	return input
end run
~~~

# コード：ポイントピックアップ

~~~AppleScript
					if projectorMode then
						--プロジェクタモードなら"30分"を選ぶ
						tell pop up button 1 of tab group 1 of window 1
							click
							delay 0.1
							click menu item "30分" of menu 1
						end tell
					else
						--プロジェクタモードでないなら"2分"を選ぶ
						tell pop up button 1 of tab group 1 of window 1
							click
							delay 0.1
							click menu item "2分" of menu 1
						end tell
					end if

~~~

ここの「window 1」がポイント。
前はwindow 3だったが、Catalinaでwindow 1になった。

そもそも、window 3というのがおかしかったのだと思う。

delayもいくつか短くした。コード見れば分かるので省略。


# 動かすにあたり注意など

- コードを直すと、.appの実行権限が消える
- システム環境設定 > セキュリティとプライバシー > プライバシー > アクセシビリティで、当該アプリのチェックボックスをチェック
- チェックボックスが反応しないとき（今回そうだった）は、いったん「ー」で削除して、再登録


# 環境の記録

マシン｜MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
　　　　2.9 GHz Intel Core i5　16 GB 2133 MHz LPDDR3
OS｜macOS Catalina 10.15.3（19D76）
ソフト｜Automator　2.10 (492)