Comment la nouvelle fonctionnalité Night Light de Windows 10 (Pro) Creators Update peut-elle être configurée via le registre?
J'aimerais configurer automatiquement les nouvelles installations/mises à jour lorsque j'utilise l'outil de gestion de la configuration de mon choix (Chef). L'inspection du système via Sysinternals Process Monitor montre qu'une clé binaire Data
est mise à jour en profondeur dans HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current
, mais c'est un gros blob REG_BINARY et peu utile.
Toute aide sur un autre registre, PowerShell ou un autre moyen simple pour l'automatisation de configurer la fonction Night Light serait très appréciée!
Avec beaucoup d'expérimentations, j'ai réussi à plus ou moins définir le format de cette valeur de registre (voir ci-dessous pour plus de détails).
J'ai créé 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 un fichier .ps1
et suivez les instructions de la section Enabling Scripts de le wiki de la balise PowerShell . Vous pouvez ensuite importer le contenu du script en procédant à une source de points:
. ./bluelightmanagement.ps1
Et utilisez ensuite la fonction semblable à une applet de commande fournie:
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 la page de réduction de la lumière bleue est ouverte lorsque vous exécutez la commande.
CloudStore
FILETIME
de 64 bits (8 octets, little endian)2
puis 1
si la fonction de réduction de la lumière bleue est activée, a disparu si elle est désactivéeLa température de couleur est stockée sous forme de deux octets en little endian. La valeur haute est la partie entière du résultat de la division de la température par 64. L'octet de valeur faible est le reste multiplié par deux, puis additionné à 128. Pour calculer la température à partir des octets, multipliez l'octet supérieur par 64. et ajoutez ce que vous obtenez lorsque vous divisez par deux la différence entre l'octet inférieur et 128.