Automatorを使うのは初めてです。部屋の明るさに合わせて自動的に調整される画面の明るさに応じて、デスクトップの壁紙を変更しようとしています(基本的にデスクトップの自動明暗モード)。
フォルダにファイルを追加するのではなく、カスタムイベントによってトリガーされるフォルダアクションのようなものはありますか?画面の明るさが変化したときにトリガーする必要があり、明るさに応じて壁紙を変更する必要があるかどうかを判断します。
次のAppleScriptは、私が必要とするすべてを実行します。
set brightness to do Shell script "nvram backlight-level | awk '{print $2}'"
if brightness is equal to "8%00" or brightness is equal to "%16%00" or brightness is equal to "%25%00" or brightness is equal to "%00%00" then
setWallpaper("dark")
else
setWallpaper("bright")
end if
on setWallpaper(imageName)
tell application "System Events"
tell every desktop
set picture to "/Users/Ryn/Desktop/wallpapers/" & imageName & ".png"
end tell
end tell
end setWallpaper
残っているのは、画面の明るさが変わるたびに実行する方法を理解することだけです。
これは、最新バージョンのmacOSMojaveを使用している場合に機能します。
Automatorを使用できますが、この状況では必要ありません。次のAppleScriptコードをスクリプトエディターアプリに直接貼り付けてから、スクリプトエディターで「開いたままのアプリケーション」として保存します。これで、新しいアプリを起動するだけで(実際にアプリを終了することを選択するまで開いたままになります)、180秒(3分)ごとにシェルスクリプトコマンドが実行されます。 180秒の値は、コード内で任意の値に変更できます。
checkBrightness() -- runs once on opening this app then the idle handler takes over
on idle
checkBrightness()
return 180 -- in seconds (runs the Shell script command every 3 min.)
end idle
on checkBrightness()
set brightness to do Shell script "nvram backlight-level | awk '{print $2}'"
if brightness is equal to "8%00" or brightness is equal to "%16%00" or brightness is equal to "%25%00" or brightness is equal to "%00%00" then
setWallpaper("dark")
else
setWallpaper("bright")
end if
end checkBrightness
on setWallpaper(imageName)
tell application "System Events"
--tell every desktop (couldnt get this to work)
tell current desktop
set picture to "/Users/Ryn/Desktop/wallpapers/" & imageName & ".png"
end tell
end tell
end setWallpaper
このアプリケーションをバックグラウンドで継続的に実行したくない場合は、別のオプションがあります。たとえば、このアプリを4時間だけ実行する場合は、代わりに次のアイドルハンドラーを使用できます。
on idle
repeat 16 times
delay (15 * minutes) --(waits to run the Shell script command every 15 min.)
checkBrightness()
end repeat
end idle
このアイドルハンドラーを使用することの唯一の欠点は、実行中にアプリを終了する唯一の方法は、通常の「終了」コマンドが機能しないため、アプリを「強制終了」することです。