Po kilku eksperymentach udało mi się mniej więcej opracować format tej wartości rejestru (szczegóły poniżej).
Zrobiłem ten skrypt PowerShell:
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
}
Aby go użyć, zapisz go jako .ps1
plik i postępuj zgodnie z instrukcjami w sekcji Włączanie skryptów wiki tagu PowerShell . Następnie możesz zaimportować zawartość skryptu za pomocą dot-sourcingu:
. ./bluelightmanagement.ps1
A następnie użyj dostarczonej funkcji cmdlet:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
Aplikacja Ustawienia aktualizuje nawet wszystko (z wyjątkiem suwaka koloru) natychmiast, jeśli po uruchomieniu polecenia jest otwarta strona redukcji niebieskiego światła.
Format
- 4 stałe bajty - pozornie podpis wspólny dla wszystkich
CloudStore
wartości
- Czas ostatniej modyfikacji ustawienia jako wartości 64-bitowej
FILETIME
(8 bajtów, mały endian)
- 8 więcej stałych bajtów
- Bajty
2
wtedy 1
, gdy funkcja redukcji niebieskie światło jest włączone, po prostu zniknąć, jeśli jest wyłączony
- 3 więcej stałych bajtów
- Godzina czasu rozpoczęcia (1 bajt)
- 1 stały bajt
- Minuty czasu rozpoczęcia (1 bajt)
- 4 stałe bajty
- Godzina czasu zakończenia (1 bajt)
- 1 stały bajt
- Minuty czasu zakończenia (1 bajt)
- 3 stałe bajty
- Nocna temperatura barwowa w stopniach Kelvina po dziwnej matematyce binarnej (2 bajty)
- 7 stałych bajtów
Temperatura koloru jest przechowywana jako dwa bajty w małym endianie. Jeden o wysokiej wartości jest liczbą całkowitą wyniku dzielenia temperatury przez 64. Bajt o niskiej wartości to reszta pomnożona przez dwa, a następnie dodana do 128. Aby obliczyć temperaturę z bajtów, należy pomnożyć wysoki bajt przez 64 i dodaj to, co otrzymasz, dzieląc przez dwa, różnicę między niskim bajtem a 128.