简介

这是个Windows系统的自动切换深浅色模式主题的 python3 脚本,由于微软一直没有实现自动切换深浅色模式主题的功能,苦天下久矣,于是我就自己写了一套脚本来实现这个功能。

本方案全程使用Windows的定时任务功能实现,不存在后台常驻进程,所以不用担心资源占用浪费以及进程保活等问题。

实现思路/方案

脚本通过网络API根据配置的经纬度获取日出日落时间,并自动创建、自动更新两个Windows的定时任务,在日出之前将系统主题切换为浅色,在日落之后将系统主题切换为深色。

为了避免因为网络问题导致切换失败,我将日出日落时间缓存在了本地,执行时直接从本地文件读取时间。

为了避免日出日落时间随着季节的变化变化,每次开机15分钟后会自动执行一次更新定时切换主题的任务时间以及本地缓存的日出日落时间文件的任务。

并且做了以下方案来避免因为 ”主题切换时间过了但是电脑在休眠、锁屏、关机状态” 从而导致没有成功切换的情况。

  • 每次登录时都会检查一次,如果时间已经过了,则直接切换主题。

  • 每次解锁试时都会检查一次,如果时间已经过了,则直接切换主题。

如果当前主题已经符合需求,则不会进行切换。

使用方法

  1. 确保本机有 python3 环境,并安装requests模块。
  2. 使用 python 运行 Start_Run.py 文件,会自动创建所需要的定时任务,并进行第一次主题切换。(首次手动切换主题文件会弹出设置面板,后续自动任务不会再有弹窗)
    py Start_Run.py
    

自定义配置

config.json 配置文件里可以更改经纬度信息,以及自定义深浅色主题路径。

经纬度

如果需要更改本地经纬度,以获取更精准的日出日落时间,则将经纬度信息填写到 config.json 文件的 Position 字段中。

LNG键值代表经度,LAT键值代表纬度。

因为我在广州,所以代码里默认经纬度为广州这边的经纬度。

主题路径

如果自定义了主题,则将主题路径填写到 config.json 文件的 Theme_path 字段中。

light_theme_path键值代表浅色主题路径,dark_theme_path键值代表深色主题路径。

记得路径的斜杠\要转义一下为双斜杠\\,或者替换为正斜杠/,不然执行会报错。

Windows默认主题路径:C:\Windows\Resources\Themes

用户自定义的主题路径:%homepath%\AppData\Local\Microsoft\Windows\Themes

注:自定义主题路径不可以使用%homepath%字符串,必须使用完整路径。

注:每次改写过主题路径之后,需要重新执行 Start_Run.py 文件方可生效。

已知缺陷

由于微软 windows 的屎山代码的问题,切换主题时有概率会自动弹出设置面板,无法避免,稍微会有点影响体验。

当然我的脚本也写了循环自动检测并关闭设置面板的代码动作,所以影响也不大,切换的时候可能会看到个设置面板自动打开然后又自动关闭,大概会影响使用0.5秒左右。

(v2.0 更改为直接修改注册表,然后系统广播更新主题环境,因此不再有烦人的弹窗。仅首次手动切换主题文件会弹出设置面板,后续自动任务不会再有弹窗)