Avec un tas d'expérimentation, j'ai réussi à plus ou moins travailler sur le format de cette valeur de Registre (voir ci-dessous pour les détails à ce sujet).
J'ai fait ce 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
}
Pour l'utiliser, enregistrez-le sous forme de .ps1
fichier et suivez les instructions de la section Activation des scripts du wiki de balise PowerShell . Vous pouvez ensuite importer le contenu du script par dot-sourcing:
. ./bluelightmanagement.ps1
Et puis utilisez la fonction de type applet de commande qu'elle fournit:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
L'application Paramètres met même à jour tout (sauf le curseur de couleur) immédiatement si vous avez la page de réduction de la lumière bleue ouverte lorsque vous exécutez la commande.
Le format
- 4 octets constants - apparemment une signature commune à toutes les
CloudStore
valeurs
- Heure de dernière modification du paramètre en tant que
FILETIME
valeur 64 bits (8 octets, petit endian)
- 8 octets plus constants
- Les octets,
2
puis 1
si la fonction de réduction de la lumière bleue est activée, juste disparue si elle est désactivée
- 3 octets plus constants
- L'heure de l'heure de début (1 octet)
- 1 octet constant
- Les minutes de l'heure de début (1 octet)
- 4 octets constants
- L'heure de l'heure de fin (1 octet)
- 1 octet constant
- Les minutes de l'heure de fin (1 octet)
- 3 octets constants
- La température de couleur nocturne en Kelvin, après quelques calculs binaires étranges (2 octets)
- 7 octets constants
La température de couleur est stockée sur deux octets en petit-boutien. La valeur élevée est la partie entière du résultat de la division de la température par 64. L'octet de faible valeur est le reste multiplié par deux, puis ajouté à 128. Pour calculer la température à partir des octets, multipliez l'octet élevé par 64 et ajoutez ce que vous obtenez lorsque vous divisez par deux la différence entre l'octet de poids faible et 128.