많은 실험을 통해 레지스트리 값의 형식을 어느 정도 해결했습니다 (자세한 내용은 아래 참조).
이 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로 나눌 때 얻는 것을 추가하십시오.