Cấu hình Windows Creators Update Night Light thông qua Registry


13

Làm cách nào để tính năng Night Light mới trong Windows 10 (Pro) Creators Update có thể được cấu hình thông qua sổ đăng ký?

Tôi muốn tự động định cấu hình cài đặt mới / cập nhật khi sử dụng công cụ quản lý cấu hình mà tôi chọn (Đầu bếp). Kiểm tra hệ thống thông qua Sysiternals Process Monitor cho thấy một Datakhóa nhị phân được cập nhật sâu HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current, nhưng đó là một blob REG_BINARY lớn và không hữu ích lắm.

Trợ giúp về đăng ký khác, PowerShell hoặc cách thân thiện tự động hóa khác để định cấu hình tính năng Ánh sáng ban đêm sẽ được đánh giá cao nhất!


sử dụng RegfromApp để theo dõi nó tốt hơn. nó tạo tập tin .reg. có lẽ nó có thể giải mã nó
magicandre1981

Cảm ơn lời đề nghị @ magicandre198. Process Monitor cung cấp cho tôi khóa chính xác và giá trị được thay đổi. Vấn đề là khóa là một nhị phân và không có tài liệu giải mã nào cho cách thức khóa dữ liệu đó được xây dựng. Với đường dẫn thú vị trong câu hỏi, đây có thể không phải là một phần dành cho sửa đổi trực tiếp (có lẽ là một vị trí cài đặt được lưu trong bộ nhớ cache). Tôi hy vọng ai đó có một dòng quản lý tính năng Night Light mới vì dường như không có nhiều thông tin về nó cho đến nay.
David F. Severski

Như tôi đã nói, sử dụng Regfromapp, nó tạo ra các tệp .reg cho mỗi thay đổi.
magicandre1981

1
Chúng tôi có thể nói chuyện tại các mục đích chéo ở đây. :) Tôi biết khóa và nội dung của khóa được điều chỉnh. Nó chỉ là một đốm khó xử không có tài liệu. Tôi đã tìm thấy github.com/jaapbrasser/SharedScripts/tree/master/set-BlueLight có một chút hack để cung cấp giao diện PS cho tính năng này, nhưng không rõ cách kết hợp các cài đặt khác nhau lại với nhau. Tôi thực sự đang tìm tài liệu (và một giao diện) về cách chuỗi nhị phân này được kết hợp với nhau.
David F. Severski

Câu trả lời:


12

Với một loạt các thử nghiệm, tôi đã quản lý ít nhiều tìm ra định dạng của giá trị Registry đó (xem bên dưới để biết chi tiết về điều đó).

Tôi đã tạo tập lệnh PowerShell này:

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
}

Để sử dụng nó, hãy lưu nó dưới dạng .ps1tệp và làm theo các hướng dẫn trong phần Kích hoạt tập lệnh của wiki thẻ PowerShell . Sau đó, bạn có thể nhập nội dung của tập lệnh bằng cách tìm nguồn cung cấp:

. ./bluelightmanagement.ps1

Và sau đó sử dụng hàm giống cmdlet mà nó cung cấp:

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

kết quả

Ứng dụng Cài đặt thậm chí cập nhật mọi thứ (trừ thanh trượt màu) ngay lập tức nếu bạn mở trang giảm ánh sáng màu xanh khi bạn chạy lệnh.

Các định dạng

  • 4 byte không đổi - dường như là một chữ ký chung cho tất cả các CloudStoregiá trị
  • Thời gian được sửa đổi lần cuối của cài đặt dưới dạng FILETIMEgiá trị 64 bit (8 byte, endian nhỏ)
  • Thêm 8 byte không đổi
  • Các byte 2sau đó 1nếu tính năng giảm ánh sáng xanh được bật, sẽ biến mất nếu nó bị tắt
  • Thêm 3 byte không đổi
  • Giờ bắt đầu (1 byte)
  • 1 byte không đổi
  • Thời gian bắt đầu là phút (1 byte)
  • 4 byte không đổi
  • Giờ kết thúc (1 byte)
  • 1 byte không đổi
  • Số phút của thời gian kết thúc (1 byte)
  • 3 byte không đổi
  • Nhiệt độ màu vào ban đêm ở Kelvin, sau một số phép toán nhị phân kỳ lạ (2 byte)
  • 7 byte không đổi

Nhiệt độ màu được lưu trữ dưới dạng hai byte theo ít endian. Giá trị cao là phần nguyên của kết quả của việc chia nhiệt độ cho 64. byte giá trị thấp là phần còn lại nhân với hai, sau đó thêm vào 128. Để tính nhiệt độ từ các byte, nhân byte cao với 64 và thêm những gì bạn nhận được khi bạn chia cho hai mức chênh lệch giữa byte thấp và 128.


Tôi đang cố gắng viết một kịch bản để chỉ bật và tắt đèn ngủ. Nếu tôi không nhầm, các byte 20 và 21 sẽ cho biết tính năng này có bật hay không (theo mô tả của bạn ít nhất là từ 4 + 8 + 8 = 20) nhưng khi tôi xem mục đăng ký bằng regedit, tôi không thấy byte 21 thay đổi, tôi không thấy bất kỳ thay đổi nào cả. Tôi đã đảm bảo rằng tôi làm mới cửa sổ regedit bằng F5 và thậm chí mở lại sau khi tôi đã bật tính năng đèn ngủ từ giao diện người dùng. Bạn có một ý tưởng về những gì đang xảy ra?
Gaboik1

1
Tôi cũng đã tìm thấy, sử dụng tiện ích này từ NirSoft nirsoft.net/articles/find_modified_time_registry_key.html , rằng khóa đăng ký mà bạn đã chỉ định hoàn toàn không được sửa đổi khi tôi kích hoạt và tắt tính năng đèn ngủ. Có lẽ Microsoft đã thay đổi nó trong bản cập nhật cuối cùng?
Gaboik1

1
@ Gaboik1 Giá trị Registry này khá lạ ở chỗ bố cục của nó thay đổi rất nhiều; định dạng tôi mô tả chỉ là một hoạt động, không nhất thiết phải là duy nhất. Tôi không biết cách nào để liên tục đọc dữ liệu ra khỏi giá trị này, nhưng tôi đã thử nghiệm trên Windows 10 1709 và sử dụng tập lệnh này để đặt cài đặt vẫn hoạt động.
Ben N

Viết điều này bằng .net, tôi thấy thực sự sử dụng lịch biểu (so với mã của bạn, dường như được thực hiện bởi mặt trời mọc / hoàng hôn) Tôi đã phải thêm byte 0xC2,0x0A, 0x00 ngay trước CA 14 0E. Sau đó, nó sẽ kích hoạt và thiết lập nó để giờ. Nếu không thì nó đã làm việc. Vào ngày 1709.
Mgamerz

@Mgamerz Có thể xác nhận điều này là chính xác và hoạt động vào năm 1809. Đã đặt một chỉnh sửa cho câu trả lời.
biến thái

2

Vài giờ thử nghiệm và voila:
Cách bật / tắt Đèn ngủ trong Win10 1903

Khóa sổ đăng ký là :

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

Tên giá trị : Dữ liệu

Để bật Đèn ngủ :

  1. Thêm byte "10" và "00" vào Dữ liệu trên 24 và 25 chỉ mục tương ứng để tất cả chiều dài dữ liệu tăng (không thay đổi giá trị hiện tại, chỉ cần thêm hai byte nữa)
  2. Giá trị tăng dần trong 11 hoặc 12 chỉ mục bằng 1 (ví dụ: nếu là FF 01 so với bây giờ thì nó cần phải là 00 02) Trên thực tế có vẻ như đã đến lúc và nó được viết bằng 8 byte ở định dạng endian nhỏ, vì vậy bạn sẽ cần cũng chỉ số 13, 14, 15, 16, 17 và 18 nếu bạn muốn làm điều đó chính xác.

Để tắt Đèn ngủ :

  1. Xóa byte "10" và "00" khỏi Dữ liệu trên 24 và 25 chỉ mục tương ứng để tất cả chiều dài dữ liệu giảm
  2. Giá trị tăng dần trong 11 hoặc 12 chỉ mục bằng 1 (ví dụ: nếu là FF 01 so với bây giờ thì nó cần phải là 00 02 tương ứng)

Tôi chỉ cần bật / tắt Đèn ngủ cho chương trình của mình, vì vậy thật không may, tất cả các tùy chọn khác vẫn cần nghiên cứu. Nhưng có vẻ như tùy chọn chính cho tất cả các tinh chỉnh khác để hoạt động (như thay đổi nhiệt độ và lịch trình) là tăng thời gian hợp lý. Các mod này cần được thực hiện trong một giá trị Dữ liệu khác trong khóa sổ đăng ký lân cận windows.data.bluelightredraction.sinstall.


Bạn có tình cờ có một kịch bản để kích hoạt - vô hiệu hóa điều này bằng bất kỳ cơ hội nào không?
biến thái

Không. tôi đã viết một chương trình nhỏ ở C.
hgrev

sẽ vẫn hữu ích (ít nhất là với tôi) nếu bạn có thể đăng một liên kết. Tôi làm việc trong C / C ++
biến thái
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.