Проведя кучу экспериментов, мне удалось более или менее определить формат значения реестра (подробности см. Ниже).
Я сделал этот скрипт 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 }
Чтобы использовать его, сохраните его в виде .ps1
файла и следуйте инструкциям в разделе «Включение сценариев» вики-тега PowerShell . Затем вы можете импортировать содержимое скрипта с помощью точечного поиска:
. ./bluelightmanagement.ps1
А затем используйте функцию, похожую на командлет, которую она предоставляет:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
Приложение «Настройки» даже сразу обновляет все (кроме ползунка цвета), если при запуске команды открыта страница уменьшения синего света.
Формат
- 4 константы байтов - казалось бы, сигнатура, общая для всех
CloudStore
значений - Время последнего изменения параметра в виде 64-битного
FILETIME
значения (8 байтов, младший порядок) - Еще 8 постоянных байтов
- Байты
2
затем,1
если синяя функция уменьшения света включена, только что, если он отключен - Еще 3 постоянных байта
- Время начала часа (1 байт)
- 1 постоянный байт
- Время начала минуты (1 байт)
- 4 постоянных байта
- Час окончания времени (1 байт)
- 1 постоянный байт
- Минуты времени окончания (1 байт)
- 3 постоянных байта
- Ночная цветовая температура в Кельвинах после некоторой странной двоичной математики (2 байта)
- 7 постоянных байтов
Цветовая температура сохраняется как два байта в порядке байтов. Старшее значение - это целая часть результата деления температуры на 64. Байт младшего значения - это остаток, умноженный на два, затем добавленный к 128. Чтобы вычислить температуру из байтов, умножьте старший байт на 64. и добавьте то, что вы получите, когда вы поделите на два разницу между младшим байтом и 128.