Windows Creators Güncelleştirmesi Gece Işığını Kayıt Defteri aracılığıyla yapılandırma


13

Windows 10 (Pro) Creators Update'teki yeni Gece Işığı özelliği kayıt defteri aracılığıyla nasıl yapılandırılabilir?

Tercih edilen yapılandırma yönetimi aracımı (Chef) kullanırken yeni / güncellenmiş kurulumları otomatik olarak yapılandırmak istiyorum. Sysinternals Process Monitor ile sistem denetimi, ikili Datagüncellemenin derinlemesine güncellendiğini gösterir HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current, ancak bu büyük bir REG_BINARY blobudur ve çok kullanışlı değildir.

Farklı bir kayıt defteri, PowerShell veya Gece Işığı özelliğini yapılandırmak için diğer otomasyon dostu bir şekilde yardım en çok takdir edilecektir!


kullanmak RegFromApp daha iyi izlemek için. .reg dosyasını oluşturur. belki de kodunu çözebilir
magicandre1981

@ Magicandre198 önerisi için teşekkürler. Process Monitor tam olarak değiştirilen anahtarı ve değeri verir. Sorun anahtarı ikili olan ve bu veri anahtarının nasıl oluşturulduğu ile ilgili herhangi bir kod çözme belgesi yok. Söz konusu korkak yol göz önüne alındığında, bu doğrudan değişiklik için tasarlanan bir bölüm olmayabilir (belki de önbelleğe alınmış ayarlar konumu). Birisinin yeni Gece Işığı özelliğinin yönetimi konusunda bir çizgisinin olmasını umuyorum, çünkü şimdiye kadar fazla bilgi yok gibi görünüyor.
David F. Severski

Dediğim gibi Regfromapp kullanın, her değişiklik için .reg dosyaları oluşturur.
magicandre1981

1
Burada farklı amaçlarla konuşuyor olabiliriz. :) Anahtarın ve ayarlanan anahtarın içeriğini biliyorum. Bu sadece hiçbir belge ile garip bir damla. Özelliğe bir PS arayüzü sağlamak için biraz hack yapan github.com/jaapbrasser/SharedScripts/tree/master/Set-BlueLight buldum , ancak çeşitli ayarları birlikte nasıl birleştireceğiniz açık değil. Gerçekten bu ikili dize bir araya nasıl belgeleme (ve bir arayüz) arıyorum.
David F. Severski

Yanıtlar:


12

Bir sürü deneme ile, bu Kayıt Defteri değerinin biçimini aşağı yukarı çalışmayı başardım (bununla ilgili ayrıntılar için aşağıya bakın).

Bu PowerShell betiğini yaptım:

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
}

Kullanmak için bir .ps1dosya olarak kaydedin ve PowerShell etiketi wiki'sinin Komut Dosyalarını Etkinleştirme bölümündeki talimatları izleyin . Daha sonra komut dosyasının içeriğini nokta kaynaklı olarak içe aktarabilirsiniz:

. ./bluelightmanagement.ps1

Ardından, sağladığı cmdlet benzeri işlevi kullanın:

Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000

sonuçlar

Komutu çalıştırdığınızda mavi ışık azaltma sayfası açıksa Ayarlar uygulaması her şeyi (renk kaydırıcısı hariç) hemen günceller.

Biçim

  • 4 sabit bayt - görünüşte tüm CloudStoredeğerler için ortak bir imza
  • 64 bitlik bir FILETIMEdeğer olarak ayarın son değiştirilme süresi (8 bayt, küçük endian)
  • 8 daha fazla sabit bayt
  • Baytlar 2sonra 1mavi ışık azaltma özelliği etkinleştirilirse, devre dışı bırakıldıysa gitti
  • 3 daha fazla sabit bayt
  • Başlangıç ​​saatinin saati (1 bayt)
  • 1 sabit bayt
  • Başlangıç ​​zamanının dakikaları (1 bayt)
  • 4 sabit bayt
  • Bitiş saatinin saati (1 bayt)
  • 1 sabit bayt
  • Bitiş zamanının dakikaları (1 bayt)
  • 3 sabit bayt
  • Kelvin'deki gece renk sıcaklığı, bazı garip ikili matematikten sonra (2 bayt)
  • 7 sabit bayt

Renk sıcaklığı küçük endianda iki bayt olarak saklanır. Yüksek değerli olan, sıcaklığın 64'e bölünmesinin sonucunun tamsayı kısmıdır. Düşük değerli bayt, kalanın ikiyle çarpılması ve daha sonra 128'e eklenmesi demektir. Sıcaklığı baytlardan hesaplamak için yüksek baytı 64 ile çarpın. ve düşük bayt ile 128 arasındaki farkı ikiye böldüğünüzde elde ettiğiniz şeyi ekleyin.


Sadece gece ışığını açıp kapatmak için bir senaryo yazmaya çalışıyorum. Yanılmıyorsam, bayt 20 ve 21, özelliğin açık olup olmadığını belirtmelidir (en az 4 + 8 + 8 = 20'den beri açıklamanıza göre), ancak regedit kullanarak kayıt defteri girdisine baktığımda, bayt 21 değişikliğine bakın, bu konuda hiçbir değişiklik görmüyorum. Ben regedit penceresini F5 ile yenilediğimden ve hatta UI'den gece lambası özelliğini değiştirdikten sonra tekrar açtığımdan emin oldum. Neler olduğu hakkında bir fikriniz var mı?
Gaboik1

1
Ayrıca, NirSoft nirsoft.net/articles/find_modified_time_registry_key.html bu yardımcı programı kullanarak , gece ışık özelliğini etkinleştirip devre dışı bıraktığınızda belirttiğiniz kayıt defteri anahtarının hiç değiştirilmediğini buldum. Belki de Microsoft son güncellemede değiştirdi?
Gaboik1

1
@ Gaboik1 Bu Kayıt Defteri değeri, düzeninin çok değişmesi açısından biraz garip; tarif ettiğim format sadece çalışan bir format, sadece tek format değil. Sürekli olarak bu değerden veri okumak için bir yol bilmiyorum, ama Windows 10 1709 üzerinde test ve ayarları ayarlamak için bu komut dosyası kullanarak hala çalışıyor.
Ben N

Bu yazarken .net, aslında zamanlama kullanmak buldum (vs vs, gündoğumu / günbatımı gibi görünüyor) CA 14 0E hemen önce bayt 0xC2,0x0A, 0x00 eklemek zorunda kaldı. Sonra tetikler ve saat bazında ayarlar. Aksi takdirde işe yaradı. 1709. On
Mgamerz

1
Bugün itibariyle, son güncelleme, bu artık çalışmaz. Değiştirilen kayıt defteri anahtarıdır \Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.settings\windows.data.bluelightreduction.settings\Datave ne yazık ki ikili biçim aynı değildir.
Julien__

2

Birkaç saat deneme ve deneme:
Win10 1903'te Gece Işığı nasıl açılır / kapatılır

Kayıt defteri anahtarı :

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

Değer adı : Veri

Gece Işığını etkinleştirmek için :

  1. Tüm veri uzunluklarının artması için sırasıyla 24 ve 25 dizindeki Verilere bayt "10" ve "00" ekleyin (mevcut değerleri değiştirmeyin, yalnızca iki bayt ekleyin)
  2. 11 veya 12 dizinde değeri 1 arttırır (örneğin: şimdi FF 01 ise sırasıyla 00 02 olması gerekir) Aslında burada zaman var ve 8 bayt olarak küçük endian biçiminde yazılmış, bu yüzden ihtiyacınız olacak ayrıca 13, 14, 15, 16, 17 ve 18 dizinleri kesin olarak yapmak istiyorsanız.

Gece Işığını devre dışı bırakmak için :

  1. "10" ve "00" baytlarını sırasıyla 24 ve 25 dizindeki Verilerden kaldırın, böylece tüm veri uzunluğu kısalır
  2. 11 veya 12 dizindeki değeri 1 arttırır (örneğin: FF 01 ise şimdi olduğundan 00 02 olması gerekir)

Programım için sadece Gece Işığı'nı açıp kapatmam gerekiyordu, bu yüzden maalesef diğer tüm seçeneklerin hala araştırmaya ihtiyacı var. Ancak, çalışmak için diğer tüm ince ayarların (sıcaklık ve programın değiştirilmesi gibi) temel seçeneğinin zamanı doğru bir şekilde arttırmak olduğu görülmektedir. Bu modların, komşu kayıt defteri anahtarı windows.data.bluelightreduction.settings içindeki başka bir Veri değerinde yapılması gerekir.


Bunu herhangi bir şansla etkinleştirmek-devre dışı bırakmak için bir komut dosyanız var mı?
metamorfoz

Hayır. C küçük bir program yazdım
hgrev

bir bağlantı gönderebilirseniz yine de (en azından benim için) yararlı olur. C / C ++ 'da çalışıyorum
metamorfoz

bir kod veya exe dosyası ister misiniz?
hgrev

1
İşte kaynak kodu ve yürütülebilir: github.com/inamozov/DisplayTest
hgrev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.