Mit ein paar Experimenten gelang es mir, das Format dieses Registrierungswerts mehr oder weniger herauszufinden (Einzelheiten dazu siehe unten).
Ich habe dieses PowerShell-Skript erstellt:
Function Set-BlueLightReductionSettings {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true)] [ValidateRange(0, 23)] [int]$StartHour,
[Parameter(Mandatory=$true)] [ValidateSet(0, 15, 30, 45)] [int]$StartMinutes,
[Parameter(Mandatory=$true)] [ValidateRange(0, 23)] [int]$EndHour,
[Parameter(Mandatory=$true)] [ValidateSet(0, 15, 30, 45)] [int]$EndMinutes,
[Parameter(Mandatory=$true)] [bool]$Enabled,
[Parameter(Mandatory=$true)] [ValidateRange(1200, 6500)] [int]$NightColorTemperature
)
$data = (2, 0, 0, 0)
$data += [BitConverter]::GetBytes((Get-Date).ToFileTime())
$data += (0, 0, 0, 0, 0x43, 0x42, 1, 0)
If ($Enabled) {$data += (2, 1)}
$data += (0xCA, 0x14, 0x0E)
$data += $StartHour
$data += 0x2E
$data += $StartMinutes
$data += (0, 0xCA, 0x1E, 0x0E)
$data += $EndHour
$data += 0x2E
$data += $EndMinutes
$data += (0, 0xCF, 0x28)
$tempHi = [Math]::Floor($NightColorTemperature / 64)
$tempLo = (($NightColorTemperature - ($tempHi * 64)) * 2) + 128
$data += ($tempLo, $tempHi)
$data += (0xCA, 0x32, 0, 0xCA, 0x3C, 0, 0)
Set-ItemProperty -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current' -Name 'Data' -Value ([byte[]]$data) -Type Binary
}
Um es zu verwenden, speichern Sie es als .ps1
Datei und befolgen Sie die Anweisungen im Abschnitt Aktivieren von Skripten des PowerShell-Tag-Wikis . Anschließend können Sie den Inhalt des Skripts durch Dot-Sourcing importieren:
. ./bluelightmanagement.ps1
Verwenden Sie dann die darin enthaltene Cmdlet-ähnliche Funktion:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
Die Einstellungen-App aktualisiert sogar alles (außer dem Farbregler) sofort, wenn beim Ausführen des Befehls die Seite zur Reduzierung des blauen Lichts geöffnet ist.
Das Format
- 4 konstante Bytes - scheinbar eine Signatur, die allen
CloudStore
Werten gemeinsam ist
- Die zuletzt geänderte Zeit der Einstellung als 64-Bit-
FILETIME
Wert (8 Byte, Little Endian)
- 8 weitere konstante Bytes
- Die Bytes sind
2
dann, 1
wenn die Blaulichtreduzierungsfunktion aktiviert ist, weg, wenn sie deaktiviert ist
- 3 weitere konstante Bytes
- Die Stunde der Startzeit (1 Byte)
- 1 konstantes Byte
- Die Minuten der Startzeit (1 Byte)
- 4 konstante Bytes
- Die Stunde der Endzeit (1 Byte)
- 1 konstantes Byte
- Die Minuten der Endzeit (1 Byte)
- 3 konstante Bytes
- Die nächtliche Farbtemperatur in Kelvin nach einigen seltsamen binären Berechnungen (2 Bytes)
- 7 konstante Bytes
Die Farbtemperatur wird als zwei Bytes in Little Endian gespeichert. Der Wert mit dem hohen Wert ist der ganzzahlige Teil des Ergebnisses der Division der Temperatur durch 64. Das Byte mit dem niedrigen Wert ist der Rest, der mit zwei multipliziert und dann zu 128 addiert wird. Um die Temperatur aus den Bytes zu berechnen, multiplizieren Sie das hohe Byte mit 64 und addieren Sie, was Sie erhalten, wenn Sie die Differenz zwischen dem niedrigen Byte und 128 durch zwei teilen.