Automator: 画面の明るさが変わると壁紙も変更する

Automator: 画面の明るさが変わると壁紙も変更する

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

残っているのは、画面の明るさが変わるたびにそれを実行する方法を見つけることだけです。

答え1

これは、最新バージョンの macOS Mojave を使用する場合に有効です。

Automator を使用することもできますが、この状況では必要ありません。次の AppleScript コードを Script Editor アプリに直接貼り付け、Script Editor で「開いたままのアプリケーション」として保存します。これで、新しいアプリ (実際に終了するまで開いたままになります) を起動するだけで、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

このアイドル ハンドラーを使用する唯一の欠点は、通常の「終了」コマンドが機能しないため、実行中のアプリを終了する唯一の方法がアプリを「強制終了」することになることです。

関連情報