たくさんの実験を重ねて、多かれ少なかれそのレジストリ値のフォーマットを解決することができました(詳細については以下を参照してください)。
次の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タグWikiの「スクリプトの有効化」セクションの指示に従います。次に、ドットソーシングによってスクリプトのコンテンツをインポートできます。
. ./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定数バイト
色温度は、リトルエンディアンの2バイトとして格納されます。高値の1は、温度を64で除算した結果の整数部分です。低値のバイトは、2を乗算した後、128に加算されます。バイトから温度を計算するには、高バイトを64で乗算しますそして、下位バイトと128の差を2で割ったときに得られるものを追加します。