我正在尝试使用任务计划程序在 Windows 个性化设置中安排亮模式/暗模式,以便 Windows 主题颜色会根据一天中的时间而改变,这对眼睛也更好。
只有这两个键负责这个:
# Set Windows Personalization, color settings, to enable Light mode for System
$RegistryPath = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize'
$Name = 'SystemUsesLightTheme'
$Value = '1'
If (-NOT (Test-Path $RegistryPath)) { New-Item -Path $RegistryPath -Force | Out-Null }
New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force
# Set Windows Personalization, color settings, to enable Light mode for Apps
$RegistryPath = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize'
$Name = 'AppsUseLightTheme'
$Value = '1'
If (-NOT (Test-Path $RegistryPath)) { New-Item -Path $RegistryPath -Force | Out-Null }
New-ItemProperty -Path $RegistryPath -Name $Name -Value $Value -PropertyType DWORD -Force
运行该程序只会部分地将 Windows 主题从深色更改为浅色,例如任务栏和文件资源管理器不会更改,但设置页面本身和其他一些区域会更改。
除了注册表之外,还有哪些组件负责执行这些个性化任务?
我跟踪了更改主题时的设置过程,除了这两个之外,没有其他注册表项被修改。
使用设置更改主题是迄今为止我发现的唯一能够正确执行主题更改的方法。
答案1
嗯,事实证明我根本不需要注册表。
Windows 11 将内置主题保存在此目录中:
C:\Windows\Resources\Themes
检查了那里的 ACL 后,我注意到所有用户都具有读取和执行权限,因此无需修改那里的任何权限。
这 4 个内置主题文件很重要,
- 主题A.主题
- 主题B.主题
- 主题C.主题
- 主题D.主题
前两个是暗模式,后两个是亮模式
因此只需通过 PowerShell 创建 4 个任务计划,以便从下午 6 点到早上 8 点 59 分使用前 2 个深色主题,从早上 9 点到下午 5 点 59 分使用浅色主题。
# Task Schedules
$user = "ENTER YOUR USERNAME"
# Dark Theme A
$action = New-ScheduledTaskAction -Execute "C:\Windows\Resources\Themes\themeA.theme"
$trigger = New-ScheduledTaskTrigger -Daily -At 6PM
Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath "Theme Scheduling" -TaskName "Dark ThemeA" -Description "Activates Dark Theme everyday at 6PM" -User $user -RunLevel Limited
# Dark Theme B
$action = New-ScheduledTaskAction -Execute "C:\Windows\Resources\Themes\themeB.theme"
$trigger = New-ScheduledTaskTrigger -Daily -At 12AM
Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath "Theme Scheduling" -TaskName "Dark ThemeB" -Description "Activates Dark Theme everyday at 12AM" -User $user -RunLevel Limited
# Light Theme C
$action = New-ScheduledTaskAction -Execute "C:\Windows\Resources\Themes\themeC.theme"
$trigger = New-ScheduledTaskTrigger -Daily -At 9AM
Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath "Theme Scheduling" -TaskName "Light ThemeC" -Description "Activates Light Theme everyday at 9AM" -User $user -RunLevel Limited
# Light Theme D
$action = New-ScheduledTaskAction -Execute "C:\Windows\Resources\Themes\themeD.theme"
$trigger = New-ScheduledTaskTrigger -Daily -At 2PM
Register-ScheduledTask -Action $action -Trigger $trigger -TaskPath "Theme Scheduling" -TaskName "Light ThemeD" -Description "Activates Light Theme everyday at 2PM" -User $user -RunLevel Limited
我之所以想要这样做是因为这是一种让操作系统根据一天中的时间改变主题的智能方式,而且对眼睛也更好。
这也是反馈中心中最重要的反馈项目人们投票支持,我认为微软最终会实现此功能,但在此之前,请使用上面的 PowerShell 脚本。