Automator: Hintergrundbild ändern, wenn die Bildschirmhelligkeit geändert wird

Automator: Hintergrundbild ändern, wenn die Bildschirmhelligkeit geändert wird

Ich bin neu bei der Verwendung von Automator. Ich versuche, mein Desktop-Hintergrundbild entsprechend der Bildschirmhelligkeit zu ändern, die sich automatisch an das Licht in meinem Zimmer anpasst (im Grunde ein automatischer Hell-/Dunkelmodus für den Desktop).

Gibt es so etwas wie eine Ordneraktion, die durch ein benutzerdefiniertes Ereignis ausgelöst wird, anstatt durch das Hinzufügen von Dateien zu einem Ordner? Ich brauche sie, damit sie ausgelöst wird, wenn sich die Bildschirmhelligkeit ändert, und dann je nach Helligkeit entschieden wird, ob das Hintergrundbild geändert werden muss.

Was ich bisher habe

Das folgende AppleScript macht alles, was ich brauche:

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

Sie müssen nur noch herausfinden, wie Sie es bei jeder Änderung der Bildschirmhelligkeit ausführen.

Antwort1

Dies funktioniert bei mir mit der neuesten Version von macOS Mojave.

Sie können Automator verwenden, aber das ist in dieser Situation nicht notwendig. Fügen Sie den folgenden AppleScript-Code direkt in die Script Editor-App ein und speichern Sie ihn dann als „offen bleibende Anwendung“ im Script Editor. Jetzt müssen Sie nur noch Ihre neue App starten (die geöffnet bleibt, bis Sie sie tatsächlich beenden) und alle 180 Sekunden (3 Minuten) wird Ihr Shell-Skriptbefehl ausgeführt. Der Wert von 180 Sekunden kann im Code nach Belieben geändert werden.

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

Es gibt eine weitere Option, wenn Sie nicht möchten, dass diese Anwendung kontinuierlich im Hintergrund ausgeführt wird. Wenn Sie beispielsweise möchten, dass diese App nur 4 Stunden lang ausgeführt wird, können Sie stattdessen den folgenden Leerlaufhandler verwenden.

on idle
    repeat 16 times
        delay (15 * minutes) --(waits to run the shell script command every 15 min.)
        checkBrightness()
    end repeat
end idle

Der einzige Nachteil bei der Verwendung dieses Idle-Handlers besteht darin, dass die einzige Möglichkeit, die App während der Ausführung zu beenden, darin besteht, sie durch „Erzwingen des Beendens“ zu beenden, da der normale Befehl „Beenden“ nicht funktioniert.

verwandte Informationen