The*_*der 2 windows-registry python batch windows-10 nightlight
如何使用批处理文件检查 Windows 10 上的夜灯是否已启用?我认为可以从 Windows 注册表访问它,但我不确定如何操作。
我正在尝试获取并设置/更改蓝光减少设置的值。
我发现了这个和许多其他的,但我不知道如何只获取值而不更改设置(我也不知道哪个命令用于获取,哪个命令用于设置或我应该将其放入哪个文件)。
如果我可以使用 BAT 文件来完成此操作,甚至使用 Python 就更好了。
如果没有 API/库可以执行此操作,我会获取密钥的值来检查夜灯是否已启用,并更改其值以启用/禁用夜灯。
如果涉及 Windows 注册表,请指定它是什么语言以及代码应位于哪个文件中(例如,如果是批处理代码,则为 .bat;如果是 Python,则为 .py)。
这是我通过链接找到的另一个超级用户答案(由Ben N )的直接复制/粘贴。这对你不起作用有什么原因吗?老实说,考虑到我复制/粘贴了这个,我不应该得到赞成票。不过,我可能应该获得投票/赏金来帮助您实现它。老实说,我试图将您的问题作为重复的问题来关闭,但是它不会让我这样做,因为它有赏金。我猜您想要帮助理解事物,即使您的问题只是想要代码。您需要指定您尝试过的确切代码或确切答案以及为什么它们不起作用。
通过大量实验,我或多或少地确定了该注册表值的格式,并编写了一个 PowerShell 脚本来设置它。
并且可能适用于早于 2019 年更新的版本。
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 = (0x43, 0x42, 0x01, 0x00, 0x0A, 0x02, 0x01, 0x00, 0x2A, 0x06)
$epochTime = [System.DateTimeOffset]::new((date)).ToUnixTimeSeconds()
$data += $epochTime -band 0x7F -bor 0x80
$data += ($epochTime -shr 7) -band 0x7F -bor 0x80
$data += ($epochTime -shr 14) -band 0x7F -bor 0x80
$data += ($epochTime -shr 21) -band 0x7F -bor 0x80
$data += $epochTime -shr 28
$data += (0x2A, 0x2B, 0x0E, 0x1D, 0x43, 0x42, 0x01, 0x00)
If ($Enabled) {$data += (0x02, 0x01)}
$data += (0xCA, 0x14, 0x0E)
$data += $StartHour
$data += 0x2E
$data += $StartMinutes
$data += (0x00, 0xCA, 0x1E, 0x0E)
$data += $EndHour
$data += 0x2E
$data += $EndMinutes
$data += (0x00, 0xCF, 0x28)
$data += ($NightColorTemperature -band 0x3F) * 2 + 0x80
$data += ($NightColorTemperature -shr 6)
$data += (0xCA, 0x32, 0x00, 0xCA, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00)
Set-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\DefaultAccount\Current\default$windows.data.bluelightreduction.settings\windows.data.bluelightreduction.settings' -Name 'Data' -Value ([byte[]]$data) -Type Binary
}
Run Code Online (Sandbox Code Playgroud)
格式(或更准确地说是工作格式,因为“设置”应用程序可以创建多个略有不同的布局):
0x02,0x010x2E(可能是字段分隔符或类型)0x2E又是常量字节最晚可能会在 2018 年更新时运行。
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 += (0xC2, 0x0A, 0x00) # Some users have reported this line necessary on 1709, was not needed originally
$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
# Alternate proposed version (see edit history), possibly version-specific?: $tempLo = ($NightColorTemperature - ($tempHi * 64)) * 4
$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
}
Run Code Online (Sandbox Code Playgroud)
将脚本保存为文件并按照PowerShell 标签 wiki.ps1的启用脚本部分中的说明进行操作。然后,您可以通过点源导入脚本的内容:
. ./bluelightmanagement.ps1
Run Code Online (Sandbox Code Playgroud)
然后使用它提供的类似 cmdlet 的函数:
Set-BlueLightReductionSettings -StartHour 7 -StartMinutes 0 -EndHour 21 -EndMinutes 15 -Enabled $true -NightColorTemperature 6000
Run Code Online (Sandbox Code Playgroud)
如果您在运行命令时打开了蓝光减少页面,“设置”应用程序甚至会立即更新所有内容(强度/颜色滑块除外)。为了让滑块看到更改,您需要重新打开“设置”应用程序。
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |