Comment activer le mode clair/mode sombre de Windows 11 de manière programmatique ?

J’essaie de planifier le mode clair/mode sombre dans les paramètres de personnalisation de Windows à l’aide du Planificateur de tâches, afin que les couleurs du thème Windows changent en fonction de l’heure de la journée, ce qui est également meilleur pour les yeux.

Ces 2 clés sont les seules responsables :

# 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

L’exécution de ce script ne change que partiellement le thème Windows du sombre au clair : la barre des tâches et l’explorateur de fichiers ne sont pas modifiés, mais la page des paramètres elle-même et certaines autres zones le sont.

Quels autres composants sont responsables, en dehors du registre, de l’exécution de ces tâches de personnalisation ?

J’ai tracé le processus des paramètres lors du changement de thème et aucune autre clé de registre que ces 2 n’est modifiée.

Changer le thème via les paramètres est la seule façon que j’ai trouvée jusqu’à présent qui effectue correctement le changement de thème.

Eh bien, il s’avère que je n’ai pas du tout besoin du registre.

Windows 11 enregistre les thèmes intégrés dans ce répertoire :

C:\Windows\Resources\Themes

Après avoir vérifié les ACL, j’ai remarqué que tous les utilisateurs disposent des autorisations de lecture et d’exécution, donc aucune modification d’autorisation n’est nécessaire.

Ces 4 fichiers, qui sont des thèmes intégrés, sont importants :

  • themeA.theme

  • themeB.theme

  • themeC.theme

  • themeD.theme

Les deux premiers sont en mode sombre, les deux autres en mode clair.

J’ai donc simplement créé 4 tâches planifiées via PowerShell afin que les 2 thèmes sombres soient utilisés de 18h00 à 8h59, et de 9h00 à 17h59 les thèmes clairs seront utilisés.

# 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

La raison pour laquelle je voulais faire cela, c’est que c’est la façon intelligente de faire changer les thèmes du système d’exploitation en fonction de l’heure de la journée, ce qui est également meilleur pour les yeux.

C’est également l’un des retours les plus votés dans le Hub de commentaires, je pense que Microsoft finira par implémenter cette fonctionnalité, mais en attendant, utilisez le script PowerShell ci-dessus.