กำหนดค่า Windows Builders Update Night Light ผ่านทาง Registry


13

คุณสมบัติ Night Light ใหม่ใน Windows 10 (Pro) อัพเดทผู้สร้างสามารถกำหนดค่าผ่านรีจิสทรีได้อย่างไร?

ฉันต้องการกำหนดค่าการติดตั้งใหม่ / อัปเดตอัตโนมัติเมื่อใช้เครื่องมือจัดการการตั้งค่าที่ฉันเลือก (Chef) การตรวจสอบระบบผ่านการตรวจสอบกระบวนการ Sysinternals แสดงให้เห็นว่ามีDataคีย์ไบนารีที่ได้รับการอัปเดตลึกHKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Currentแต่นั่นเป็น REG_BINARY blob ขนาดใหญ่และไม่มีประโยชน์มาก

ช่วยเหลือเกี่ยวกับรีจิสตรี, PowerShell หรือวิธีอัตโนมัติที่เป็นมิตรอื่น ๆ เพื่อกำหนดค่าฟีเจอร์ Night Light จะได้รับการชื่นชมมากที่สุด!


ใช้RegfromAppเพื่อติดตามมันได้ดียิ่งขึ้น มันสร้างไฟล์. reg อาจจะถอดรหัสได้
magicandre1981

ขอบคุณสำหรับคำแนะนำ @ magicandre198 การตรวจสอบกระบวนการให้คีย์และค่าที่แน่นอนกับการเปลี่ยนแปลง ปัญหาคือกุญแจเป็นเลขฐานสองและไม่มีเอกสารถอดรหัสสำหรับวิธีการสร้างคีย์ข้อมูล ระบุเส้นทางขี้ขลาดในคำถามนี้อาจไม่ได้เป็นส่วนที่มีไว้สำหรับการปรับเปลี่ยนโดยตรง (อาจจะเป็นสถานที่ตั้งค่าแคช) ฉันหวังว่าบางคนจะมีบรรทัดในการจัดการคุณลักษณะ Night Light ใหม่เนื่องจากดูเหมือนจะยังไม่มีข้อมูลมากนัก
David F. Severski

อย่างที่ฉันบอกว่าใช้ Regfromapp มันสร้างไฟล์. reg สำหรับทุกการเปลี่ยนแปลง
magicandre1981

1
เราอาจพูดคุยข้ามจุดประสงค์ที่นี่ :) ฉันรู้กุญแจและเนื้อหาของกุญแจที่ถูกปรับ มันเป็นเพียงหยดที่น่าอึดอัดใจและไม่มีเอกสารประกอบ ฉันพบgithub.com/jaapbrasser/SharedScripts/tree/master/Set-BlueLightซึ่งทำการแฮ็กเล็กน้อยเพื่อให้อินเทอร์เฟซ PS กับคุณลักษณะ แต่ไม่ชัดเจนว่าจะรวมการตั้งค่าต่างๆเข้าด้วยกันอย่างไร ฉันกำลังมองหาเอกสาร (และอินเทอร์เฟซ) จริงๆเกี่ยวกับวิธีการรวมสตริงไบนารีนี้
David F. Severski

คำตอบ:


12

ด้วยการทดลองมากมายทำให้ฉันจัดการกับรูปแบบของค่า Registry นั้นมากขึ้นหรือน้อยลง (ดูรายละเอียดด้านล่าง)

ฉันสร้างสคริปต์ 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

จากนั้นใช้ฟังก์ชั่นที่คล้ายกับ cmdlet:

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

ผลลัพธ์

แอพตั้งค่าจะอัพเดตทุกอย่าง (ยกเว้นแถบเลื่อนสี) ทันทีหากคุณเปิดหน้าการลดแสงสีฟ้าเมื่อคุณเรียกใช้คำสั่ง

รูปแบบ

  • 4 ไบต์คงที่ - ดูเหมือนเป็นลายเซ็นต์ทั่วไปสำหรับCloudStoreค่าทั้งหมด
  • เวลาที่แก้ไขล่าสุดของการตั้งค่าเป็นค่า 64 บิตFILETIME(8 ไบต์, endian น้อย)
  • 8 ไบต์คงที่มากขึ้น
  • ไบต์2แล้ว1ถ้าคุณสมบัติการลดแสงสีฟ้าถูกเปิดใช้งานไปเพียงแค่ถ้าเป็นคนพิการ
  • 3 ไบต์คงที่มากขึ้น
  • ชั่วโมงเริ่มต้นของเวลา (1 ไบต์)
  • 1 ไบต์คงที่
  • นาทีเริ่มต้นของเวลา (1 ไบต์)
  • 4 ไบต์คงที่
  • เวลาสิ้นสุดของชั่วโมง (1 ไบต์)
  • 1 ไบต์คงที่
  • นาทีสุดท้ายของเวลา (1 ไบต์)
  • 3 ไบต์คงที่
  • อุณหภูมิสีในเวลากลางคืนในเคลวินหลังจากคณิตศาสตร์เลขฐานสองแปลก ๆ (2 ไบต์)
  • 7 ไบต์คงที่

อุณหภูมิสีจะถูกเก็บไว้เป็นสองไบต์ใน endian น้อย หนึ่งค่าที่สูงคือส่วนจำนวนเต็มของผลลัพธ์ของการหารอุณหภูมิด้วย 64 ไบต์ที่มีค่าต่ำคือส่วนที่เหลือคูณด้วยสองจากนั้นเพิ่มเป็น 128 เมื่อต้องการคำนวณอุณหภูมิจากไบต์ให้คูณไบต์ที่สูงด้วย 64 และเพิ่มสิ่งที่คุณได้รับเมื่อคุณหารด้วยสองความแตกต่างระหว่างไบต์ต่ำกับ 128


ฉันพยายามเขียนสคริปต์เพื่อเปิดและปิดไฟกลางคืนเท่านั้น หากฉันไม่เข้าใจผิดไบต์ที่ 20 และ 21 ควรระบุว่าคุณลักษณะนั้นเปิดอยู่หรือไม่ (ตามคำอธิบายของคุณอย่างน้อยตั้งแต่ 4 + 8 + 8 = 20) แต่เมื่อฉันดูรายการรีจิสตรีโดยใช้ regedit ฉันจะไม่ทำ เห็นการเปลี่ยนแปลงไบต์ 21 ฉันไม่เห็นการเปลี่ยนแปลงใด ๆ เลย ฉันทำให้แน่ใจว่าฉันรีเฟรชหน้าต่าง regedit ด้วย F5 และเปิดขึ้นอีกครั้งหลังจากที่ฉันได้สลับคุณสมบัติแสงกลางคืนจาก UI คุณมีความคิดว่าเกิดอะไรขึ้น?
Gaboik1

1
ฉันยังพบว่าการใช้ยูทิลิตีนี้จาก NirSoft nirsoft.net/articles/find_modified_time_registry_key.htmlว่าคีย์รีจิสตรีที่คุณระบุไม่ได้รับการแก้ไขเลยเมื่อฉันเปิดใช้งานและปิดใช้งานคุณลักษณะไฟกลางคืน บางที Microsoft เปลี่ยนไปในการอัพเดตครั้งล่าสุดใช่ไหม
Gaboik1

1
@ Gaboik1 ค่ารีจิสตรีนี้เป็นสิ่งที่แปลกในรูปแบบที่เปลี่ยนแปลงไปมาก รูปแบบที่ฉันอธิบายเป็นเพียงรูปแบบที่ใช้ได้ไม่จำเป็นต้องเป็นรูปแบบเดียวเท่านั้น ฉันไม่รู้วิธีการอ่านข้อมูลอย่างสม่ำเสมอจากค่านี้ แต่ฉันทดสอบบน Windows 10 1709 และใช้สคริปต์นี้เพื่อตั้งค่าการตั้งค่ายังคงทำงาน
Ben N

การเขียนสิ่งนี้ใน. net ฉันพบว่าใช้ตารางเวลา (เทียบกับรหัสของคุณซึ่งดูเหมือนว่าจะทำโดยพระอาทิตย์ขึ้น / ตก) ฉันต้องเพิ่มไบต์ 0xC2,0x0A, 0x00 ก่อน CA 14 0E จากนั้นมันจะทริกเกอร์และตั้งค่าตามชั่วโมง มิฉะนั้นมันทำงาน ในวันที่ 1709
Mgamerz

1
ณ วันนี้อัพเดตล่าสุดสิ่งนี้ไม่ทำงานอีกต่อไป รีจิสตรีคีย์ถูกปรับเปลี่ยน\Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.settings\windows.data.bluelightreduction.settings\Dataและน่าเสียดายที่รูปแบบไบนารีไม่เหมือนกัน
Julien__

2

การทดลองหลายชั่วโมงและ voila:
วิธีเปิด / ปิดไฟกลางคืนใน Win10 1903

คีย์รีจิสทรีคือ :

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

ชื่อค่า : ข้อมูล

วิธีเปิดใช้งาน Night Light :

  1. เพิ่มไบต์ "10" และ "00" ลงใน Data ในดัชนี 24 และ 25 ตามลำดับเพื่อเพิ่มความยาวของข้อมูลทั้งหมด (ไม่เปลี่ยนค่าที่มีอยู่เพียงเพิ่มสองไบต์เพิ่มเติม)
  2. เพิ่มค่าในดัชนี 11 หรือ 12 ต่อ 1 (เช่น: ถ้าเป็น FF 01 กว่าตอนนี้ต้องเป็น 00 02 ตามลำดับ) ที่จริงแล้วดูเหมือนว่าถึงเวลาที่นี่แล้วและมันถูกเขียนด้วย 8 ไบต์ในรูปแบบ endian น้อยดังนั้นคุณต้อง นอกจากนี้ยังมีดัชนี 13, 14, 15, 16, 17 และ 18 ด้วยหากคุณต้องการแม่นยำ

วิธีปิดใช้งานไฟกลางคืน :

  1. ลบไบต์ "10" และ "00" ออกจาก Data ในดัชนี 24 และ 25 ตามลำดับเพื่อลดความยาวของข้อมูลทั้งหมด
  2. เพิ่มค่าในดัชนี 11 หรือ 12 ต่อ 1 (ตัวอย่างเช่น: ถ้าเป็น FF 01 กว่าตอนนี้ต้องเป็น 00 02 ตามลำดับ)

ฉันเพียงต้องการเปิด / ปิดไฟกลางคืนสำหรับโปรแกรมของฉันเท่านั้นโชคไม่ดีที่ตัวเลือกอื่น ๆ ยังคงต้องการการวิจัย แต่ดูเหมือนว่าตัวเลือกที่สำคัญในการปรับแต่งอื่น ๆ ทั้งหมดในการทำงาน (เช่นการเปลี่ยนแปลงอุณหภูมิและตารางเวลา) คือการเพิ่มเวลาอย่างถูกต้อง ตัวดัดแปลงเหล่านี้จำเป็นต้องทำในค่าข้อมูลอื่นในคีย์รีจิสทรีที่อยู่ใกล้เคียง windows.data.bluelightreduction.settings


คุณมีสคริปต์เพื่อเปิดใช้งานสิ่งนี้โดยบังเอิญหรือไม่?
เปลี่ยนแปลง

ไม่ ฉันเขียนโปรแกรมเล็ก ๆ ใน C.
hgrev

จะยังคงมีประโยชน์ (สำหรับฉันอย่างน้อย) หากคุณสามารถโพสต์ลิงก์ได้ ฉันทำงานใน C / C ++
เปลี่ยนแปลง

คุณต้องการรหัสหรือไฟล์ exe?
hgrev

1
นี่คือซอร์สโค้ดและการปฏิบัติการ: github.com/inamozov/DisplayTest
hgrev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.