레지스트리를 통해 Windows 크리에이터 업데이트 야간 조명 구성


13

Windows 10 (Pro) 크리에이터 업데이트의 새로운 야간 조명 기능을 레지스트리를 통해 어떻게 구성 할 수 있습니까?

선택한 구성 관리 도구 (Chef)를 사용할 때 새 / 업데이트 된 설치를 자동으로 구성하고 싶습니다. Sysinternals Process Monitor를 통한 시스템 검사는 이진 Data키가 깊게 업데이트 되는 것을 보여 HKCU\Software\Microsoft\Windows\CurrentVersion\CloudStore\Cache\DefaultAccount\$$windows.data.bluelightreduction.settings\Current주지만 이는 큰 REG_BINARY 얼룩이며 그다지 유용하지 않습니다.

야간 조명 기능을 구성하는 다른 레지스트리, PowerShell 또는 기타 자동화 친화적 인 방법에 대한 도움이 가장 좋습니다!


RegfromApp 을 사용 하여 더 잘 추적하십시오. .reg 파일을 생성합니다. 아마 그것을 해독 할 수 있습니다
magicandre1981

제안 @ magicandre198에 감사드립니다. 프로세스 모니터는 변경되는 정확한 키와 값을 제공합니다. 문제는 키가 이진 키이며 해당 데이터 키를 작성하는 방법에 대한 디코딩 설명서가 없다는 것입니다. 문제가있는 경로를 고려할 때 이것은 직접 수정하기위한 섹션이 아닐 수도 있습니다 (캐시 된 설정 위치). 지금까지 많은 정보가없는 것처럼 누군가가 새로운 야간 조명 기능을 관리하는 데 도움이되기를 바랍니다.
David F. Severski

내가 말했듯이 Regfromapp을 사용하면 모든 변경에 대해 .reg 파일이 생성됩니다.
magicandre1981

1
우리는 여기서 교차 목적에 대해 이야기하고있을 것입니다. :) 나는 키와 조정되는 키의 내용을 알고 있습니다. 문서가없는 어색한 얼룩입니다. 기능에 PS 인터페이스를 제공하기 위해 약간의 해킹을 수행하는 github.com/jaapbrasser/SharedScripts/tree/master/Set-BlueLight 를 찾았 지만 다양한 설정을 결합하는 방법은 명확하지 않습니다. 이 바이너리 문자열이 어떻게 구성되는지에 대한 문서 (및 인터페이스)를 찾고 있습니다.
David F. Severski

답변:


12

많은 실험을 통해 레지스트리 값의 형식을 어느 정도 해결했습니다 (자세한 내용은 아래 참조).

이 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 태그 wiki 의 스크립트 사용 가능 섹션에 있는 지시 사항을 따르십시오 . 그런 다음 도트 소싱을 통해 스크립트 내용을 가져올 수 있습니다.

. ./bluelightmanagement.ps1

그런 다음 제공하는 cmdlet과 유사한 기능을 사용하십시오.

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

결과

명령을 실행할 때 청색광 감소 페이지가 열려 있으면 설정 앱은 색상 슬라이더를 제외한 모든 것을 즉시 업데이트합니다.

형식

  • 4 상수 바이트-모든 CloudStore값에 공통적 인 서명
  • 64 비트 FILETIME값 (8 바이트, 리틀 엔디안)으로 설정을 마지막으로 수정 한 시간
  • 8 바이트 이상의 상수 바이트
  • 바이트는 2다음 1청색광 감소 기능을 사용하는 경우가 무효 인 경우, 다만 사라
  • 3 바이트 이상의 상수 바이트
  • 시작 시간 시간 (1 바이트)
  • 상수 바이트 1 개
  • 시작 시간의 분 (1 바이트)
  • 4 바이트
  • 종료 시간 시간 (1 바이트)
  • 상수 바이트 1 개
  • 종료 시간 분 (1 바이트)
  • 상수 바이트 3 개
  • 이상한 이진 수학 (2 바이트) 후 켈빈의 야간 색 온도
  • 상수 바이트 7 개

색온도는 리틀 엔디안에서 2 바이트로 저장됩니다. 높은 값의 1은 온도를 64로 나눈 결과의 정수 부분입니다. 낮은 값의 바이트는 나머지에 2를 곱한 다음 128을 더한 값입니다. 바이트에서 온도를 계산하려면 높은 바이트에 64를 곱하십시오. 낮은 바이트와 128의 차이를 2로 나눌 때 얻는 것을 추가하십시오.


야간 조명 만 켜고 끄는 스크립트를 작성하려고합니다. 내가 실수하지 않으면 바이트 20과 21은 기능이 켜져 있는지 (적어도 4 + 8 + 8 = 20 이후 설명에 따라) 표시해야하지만 regedit을 사용하여 레지스트리 항목을 볼 때 나는 그렇지 않습니다. 바이트 21 변경 참조, 그 문제에 대한 변경은 전혀 보이지 않습니다. F5로 regedit 창을 새로 고치고 UI에서 야간 조명 기능을 토글 한 후 다시 열었습니다. 무슨 일이 일어나고 있는지 알고 있습니까?
Gaboik1

1
또한 NirSoft nirsoft.net/articles/find_modified_time_registry_key.html 의이 유틸리티를 사용 하여 야간 조명 기능을 활성화 및 비활성화 할 때 지정한 레지스트리 키가 전혀 수정되지 않음을 발견했습니다. 아마도 Microsoft가 마지막 업데이트에서 변경했을까요?
Gaboik1

1
@ Gaboik1이 레지스트리 값은 레이아웃이 많이 변경된다는 점에서 이상합니다. 내가 설명한 형식은 작동하는 형식 일뿐이며 반드시 유일한 형식은 아닙니다. 이 값에서 지속적으로 데이터를 읽는 방법을 모르지만 Windows 10 1709에서 테스트 했으며이 스크립트를 사용하여 설정을 계속 작동합니다.
벤 N

이것을 .net으로 작성하면 실제로 schedule (일명 일출 / 일몰에 의한 것처럼 보이는 코드)을 사용하는 것으로 나타났습니다 .CA 14 0E 직전에 바이트 0xC2,0x0A, 0x00을 추가해야했습니다. 그런 다음 트리거하여 시간을 기준으로 설정합니다. 그렇지 않으면 효과가있었습니다. 1709에
Mgamerz

1
오늘 마지막 업데이트부터는 더 이상 작동하지 않습니다. 수정 된 레지스트리 키는 \Software\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.settings\windows.data.bluelightreduction.settings\Data슬프게도 이진 형식이 동일하지 않습니다.
Julien__

2

몇 시간의 실험과 짜잔 :
1910 년 Win10에서 야간 조명을 켜고 끄는 방법

레지스트리 키는 다음과 같습니다.

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

값 이름 : 데이터

나이트 라이트를 사용하려면 :

  1. 24 및 25 인덱스의 데이터에 각각 바이트 "10"및 "00"을 추가하여 모든 데이터 길이가 증가합니다 (기존 값을 변경하지 말고 2 바이트 만 추가하십시오)
  2. 11 또는 12 인덱스의 값을 1 씩 증가시킵니다 (예 : 현재 FF 01 인 경우 각각 00 02 여야 함). 실제로 여기에 시간이 있고 작은 엔디안 형식으로 8 바이트로 작성되었으므로 당신이 그것을 정확하게하고 싶다면 13, 14, 15, 16, 17 및 18 인덱스도.

나이트 라이트를 사용하지 않으려면 :

  1. 24 및 25 인덱스의 데이터에서 각각 바이트 "10"및 "00"을 제거하여 모든 데이터 길이를 줄입니다.
  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.