Mengkonfigurasi Windows Creators Update Night Light melalui Registry

13

Bagaimana fitur Cahaya Malam baru di Pembaruan Pembuat Windows 10 (Pro) dapat dikonfigurasi melalui registri?

Saya ingin mengonfigurasi instalasi baru / yang diperbarui secara otomatis ketika menggunakan alat manajemen konfigurasi pilihan saya (Chef). Pemeriksaan sistem melalui Sysinternals Process Monitor menunjukkan Datakunci biner semakin diperbarui HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current, tetapi itu adalah gumpalan REG_BINARY yang besar dan tidak terlalu berguna.

Bantuan pada registri yang berbeda, PowerShell, atau cara ramah otomatisasi lainnya untuk mengonfigurasi fitur Night Light akan sangat dihargai!

David F. Severski
sumber
gunakan RegfromApp untuk melacaknya dengan lebih baik. itu menghasilkan file .reg. mungkin bisa memecahkan kode itu
magicandre1981
Terima kasih atas sarannya @ magicandre198. Monitor Proses memberi saya kunci dan nilai yang tepat sedang diubah. Masalahnya adalah kuncinya adalah biner dan tidak ada dokumentasi decoding yang tersedia untuk bagaimana kunci data dibuat. Mengingat jalur funky yang dipermasalahkan, ini mungkin bukan bagian yang dimaksudkan untuk modifikasi langsung (mungkin lokasi pengaturan cache). Saya berharap seseorang memiliki garis pada manajemen fitur Night Light baru karena tampaknya tidak ada banyak informasi tentang itu sejauh ini.
David F. Severski
seperti yang saya katakan, gunakan Regfromapp, ini menghasilkan file .reg untuk setiap perubahan.
magicandre1981
1
Kita mungkin berbicara dengan berbagai tujuan di sini. :) Saya tahu kunci dan isi kunci disesuaikan. Itu hanya gumpalan canggung tanpa dokumentasi. Saya telah menemukan github.com/jaapbrasser/SharedScripts/tree/master/Set-BlueLight yang melakukan sedikit peretasan untuk menyediakan antarmuka PS ke fitur tersebut, tetapi tidak jelas bagaimana menggabungkan berbagai pengaturan bersama. Saya benar-benar mencari dokumentasi (dan antarmuka) tentang bagaimana string biner ini disatukan.
David F. Severski

Jawaban:

12

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 .ps1file 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

hasil

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 CloudStorenilai
  • Pengaturan waktu yang terakhir diubah sebagai nilai 64-bit FILETIME(8 byte, little endian)
  • 8 byte lebih konstan
  • Bytes 2lalu 1jika 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.

Ben N
sumber
Saya mencoba menulis skrip untuk hanya menghidupkan dan mematikan lampu malam. Jika saya tidak salah, byte 20 dan 21 harus menunjukkan jika fitur ini aktif (sesuai dengan deskripsi Anda setidaknya sejak 4 + 8 + 8 = 20) tetapi ketika saya melihat entri registri menggunakan regedit, saya tidak lihat perubahan byte 21, saya tidak melihat perubahan sama sekali dalam hal ini. Saya sudah memastikan saya menyegarkan jendela regedit dengan F5 dan bahkan membukanya kembali setelah saya mengaktifkan fitur lampu malam dari UI. Apakah Anda memiliki gagasan tentang apa yang sedang terjadi?
Gaboik1
1
Saya juga menemukan, menggunakan utilitas ini dari NirSoft nirsoft.net/articles/find_modified_time_registry_key.html , bahwa kunci registri yang Anda tentukan tidak dimodifikasi sama sekali ketika saya mengaktifkan dan menonaktifkan fitur lampu malam. Mungkin Microsoft mengubahnya di pembaruan terakhir?
Gaboik1
1
@ Gaboik1 Nilai Registry ini agak aneh karena tata letaknya banyak berubah; format yang saya jelaskan hanyalah yang berfungsi, belum tentu satu-satunya. Saya tidak tahu cara untuk secara konsisten membaca data dari nilai ini, tetapi saya menguji pada Windows 10 1709 dan menggunakan skrip ini untuk mengatur pengaturan masih berfungsi.
Ben N
Menulis ini dalam .net, saya menemukan benar-benar menggunakan jadwal (vs kode Anda, yang tampaknya dilakukan oleh matahari terbit / terbenam) Saya harus menambahkan byte 0xC2,0x0A, 0x00 sebelum CA 14 0E. Maka itu akan memicu dan mengaturnya berdasarkan jam. Kalau tidak berhasil. Pada 1709.
Mgamerz
@Mgamerz Dapat mengonfirmasi ini benar, dan berfungsi pada 1809. Telah melakukan edit pada jawabannya.
metamorfosis
2

Beberapa jam percobaan dan voila:
Cara menghidupkan / mematikan Cahaya Malam di Win10 1903

Kunci Registri adalah :

HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.bluelightreductionstate\windows.data.bluelightreduction.bluelightreductionstate\

Nama nilai : Data

Untuk mengaktifkan Cahaya Malam :

  1. Tambahkan byte "10" dan "00" ke Data pada indeks 24 dan 25 masing-masing sehingga semua panjang data meningkat (jangan ubah nilai yang ada, cukup tambahkan dua byte lagi)
  2. Nilai kenaikan dalam 11 atau 12 indeks dengan 1 (misalnya: jika itu adalah FF 01 dari sekarang masing-masing harus 00 02) Sebenarnya sepertinya sudah waktunya di sini dan itu ditulis dalam 8 byte dalam format endian kecil, jadi Anda akan perlu juga indeks 13, 14, 15, 16, 17 dan 18 jika Anda ingin melakukannya dengan tepat.

Untuk menonaktifkan Night Light :

  1. Hapus byte "10" dan "00" dari Data pada indeks 24 dan 25 masing-masing sehingga semua panjang data berkurang
  2. Nilai kenaikan dalam 11 atau 12 indeks dengan 1 (misalnya: jika FF 01 dari sekarang, masing-masing harus sebesar 00 02)

Saya hanya perlu menyalakan / mematikan Lampu Malam untuk program saya, jadi sayangnya semua opsi lain masih perlu penelitian. Tapi sepertinya opsi kunci untuk semua tweak lain untuk bekerja (seperti mengubah suhu dan jadwal) adalah untuk menambah waktu dengan benar. Mod ini perlu dilakukan di nilai Data lain di kunci registri tetangga windows.data.bluelightreduction.settings.

hgrev
sumber
Apakah Anda memiliki skrip untuk mengaktifkan-menonaktifkan ini kebetulan?
metamorfosis
tidak. saya menulis sebuah program kecil di C.
hgrev
akan tetap berguna (setidaknya bagi saya) jika Anda dapat memposting tautan. Saya bekerja di C / C ++
metamorfosis
Anda ingin file kode atau exe?
hgrev
Entah jika saya tidak keberatan. : _)
metamorfosis