Con un sacco di sperimentazione, sono riuscito a elaborare più o meno il formato di quel valore del Registro di sistema (vedi sotto per i dettagli al riguardo).
Ho realizzato questo script 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
}
Per usarlo, salvalo come .ps1
file e segui le istruzioni nella sezione Abilitazione degli script del tag wiki PowerShell . È quindi possibile importare il contenuto dello script tramite dot-sourcing:
. ./bluelightmanagement.ps1
Quindi utilizza la funzione simile a un cmdlet che fornisce:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
L'app Impostazioni aggiorna anche tutto (tranne il cursore del colore) immediatamente se hai aperto la pagina di riduzione della luce blu quando esegui il comando.
Il formato
- 4 byte costanti - apparentemente una firma comune a tutti i
CloudStore
valori
- L'ora dell'ultima modifica dell'impostazione come valore a 64 bit
FILETIME
(8 byte, little endian)
- 8 byte più costanti
- I byte
2
quindi 1
se la funzione di riduzione della luce blu è abilitata, se non è attiva è sparita
- 3 byte più costanti
- L'ora di inizio (1 byte)
- 1 byte costante
- I minuti dell'ora di inizio (1 byte)
- 4 byte costanti
- Ora dell'ora di fine (1 byte)
- 1 byte costante
- I minuti dell'ora di fine (1 byte)
- 3 byte costanti
- La temperatura del colore notturna in Kelvin, dopo qualche strano calcolo binario (2 byte)
- 7 byte costanti
La temperatura del colore viene memorizzata come due byte in little endian. Quello ad alto valore è la parte intera del risultato della divisione della temperatura per 64. Il byte di valore basso è il resto moltiplicato per due, quindi aggiunto a 128. Per calcolare la temperatura dai byte, moltiplicare il byte alto per 64 e aggiungi ciò che ottieni quando dividi per due la differenza tra il byte basso e 128.