web-dev-qa-db-ja.com

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

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

2
potato

これは、最新バージョンの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

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

0
wch1zpink