Con un montón de experimentación, logré calcular más o menos el formato de ese valor del Registro (ver más abajo para más detalles).
Hice este script de 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
}
Para usarlo, guárdelo como un .ps1
archivo y siga las instrucciones en la sección Habilitación de scripts de la wiki de etiquetas de PowerShell . Luego puede importar el contenido de la secuencia de comandos mediante el abastecimiento de puntos:
. ./bluelightmanagement.ps1
Y luego use la función tipo cmdlet que proporciona:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
La aplicación Configuración incluso actualiza todo (excepto el control deslizante de color) inmediatamente si tiene abierta la página de reducción de luz azul cuando ejecuta el comando.
El formato
- 4 bytes constantes: aparentemente una firma común a todos los
CloudStore
valores
- El tiempo de la última modificación de la configuración como un
FILETIME
valor de 64 bits (8 bytes, little endian)
- 8 bytes más constantes
- Los bytes,
2
entonces, 1
si la función de reducción de luz azul está habilitada, solo desaparecerá si está deshabilitada
- 3 bytes más constantes
- La hora de inicio (1 byte)
- 1 byte constante
- Los minutos de la hora de inicio (1 byte)
- 4 bytes constantes
- La hora del final (1 byte)
- 1 byte constante
- Los minutos del tiempo final (1 byte)
- 3 bytes constantes
- La temperatura de color nocturna en Kelvin, después de algunas matemáticas binarias extrañas (2 bytes)
- 7 bytes constantes
La temperatura de color se almacena como dos bytes en little endian. El valor alto es la parte entera del resultado de dividir la temperatura entre 64. El byte de valor bajo es el resto multiplicado por dos, luego sumado a 128. Para calcular la temperatura de los bytes, multiplique el byte alto por 64 y agrega lo que obtienes cuando divides entre dos la diferencia entre el byte bajo y 128.