Dengan banyak eksperimen, saya berhasil sedikit banyak mengerjakan format nilai Registry itu (lihat detailnya di bawah).
Saya membuat skrip PowerShell ini:
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
}
Untuk menggunakannya, simpan sebagai .ps1
file dan ikuti instruksi di bagian Mengaktifkan Script dari wiki tag PowerShell . Anda kemudian dapat mengimpor konten skrip dengan dot-sourcing:
. ./bluelightmanagement.ps1
Dan kemudian gunakan fungsi cmdlet-like yang disediakan:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
Aplikasi Pengaturan bahkan memperbarui semuanya (kecuali slider warna) segera jika Anda memiliki halaman reduksi cahaya biru terbuka ketika Anda menjalankan perintah.
Format
- 4 byte konstan - tampaknya merupakan tanda tangan yang umum untuk semua
CloudStore
nilai
- Pengaturan waktu yang terakhir diubah sebagai nilai 64-bit
FILETIME
(8 byte, little endian)
- 8 byte lebih konstan
- Bytes
2
lalu 1
jika fitur reduksi cahaya biru diaktifkan, hilang begitu saja jika dinonaktifkan
- 3 byte lebih konstan
- Jam waktu mulai (1 byte)
- 1 byte konstan
- Menit waktu mulai (1 byte)
- 4 byte konstan
- Jam waktu akhir (1 byte)
- 1 byte konstan
- Menit waktu akhir (1 byte)
- 3 byte konstan
- Suhu warna malam hari di Kelvin, setelah beberapa matematika biner aneh (2 byte)
- 7 byte konstan
Suhu warna disimpan sebagai dua byte dalam endian kecil. Yang bernilai tinggi adalah bagian bilangan bulat dari hasil membagi suhu dengan 64. Byte bernilai rendah adalah sisanya dikalikan dua, lalu ditambahkan ke 128. Untuk menghitung suhu dari byte, kalikan byte tinggi dengan 64 dan tambahkan apa yang Anda dapatkan ketika Anda membagi dua perbedaan antara byte rendah dan 128.