在Python内实现Windows的深浅色切换

众所周知,我们的Windows的开发者非常擅长“Touch Fish”。一个简简单单的自动切换深浅色和快速切换深浅色的功能它竟然没有给大家提供,有不少开发者做出了这类功能。这里,我将用Python代码讲解这一功能的实现过程。

这里只讲解它的原理,图形方案交给你们设计。

深浅色切换实现

通过查阅资料可知,切换电脑深浅色可以通过修改注册表实现,这里提供两串代码

  • 切换深色模式
reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 0 /f
reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f
  • 切换浅色模式
reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 1 /f
reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 1 /f

因为从 Windows 10 v1903 开始,深色主题分为 Windows 模式(每个代码块上半部分)和应用模式(每个代码块下半部分),这时我们就需要判断Windows版本号。

我们打开cmd.exe,通过执行ver命令可以获取版本号。

C:\Users\hestudio>ver

Microsoft Windows [版本 10.0.22621.819]

我们需要的是22621这部分内容,所以我们需要获取这部分内容,代码是

import os
os.popen("ver").read()[28:33]

通过查阅资料可知,Windows 10 v1903 的版本号是10.0.18362.xxx,所以我们可以通过以下代码判断

ver = int(os.popen("ver").read()[28:33]) >= 18362

如果返回结果为True那么就执行两个指令,否则执行一个指令。

那么,这部分的完整代码为

import os

# 定义深浅色命令
DARK_SYSTEM = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 0 /f"
DARK_APPS = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f"
LIGHT_SYSTEM = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 1 /f"
LIGHT_APPS = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 1 /f

# 检查版本
ver = int(os.popen("ver").read()[28:33]) >= 18362

# 深色切换函数
def dark():
    os.system(DARK_SYSTEM)
    if ver:
        os.system(DARK_APPS)
    return 0

# 浅色切换函数
def light():
    os.system(LIGHT_SYSTEM)
    if ver:
        os.system(LIGHT_APPS)
    return 0

实现自动切换

实现自动切换可以通过计划任务控制。为了方便展示原理,我这里直接用函数表示,在实际运用中,这里通常是可以变化的。

首先我们需要实时获取现在的时间

import time
import threading

def time_get():
    global now_time
    while True:
        now_time = time.strftime('%H:%M', time.localtime())

get_time = threading.thread(target=time_get)
get_time.start()

通过获取预设直接调用函数

while True:
    if now_time == '6:00':
        light()
    elif now_time == '20:00'
        dark()

当然,这里也可以实现自动切换壁纸,只需要在if内的light()或者dark()的底下利用os.system()执行对应的命令即可。有关切换壁纸的cmd命令,你可以在百度中查找。

最后将上面的代码总结一下

import os
import time
import threading

# 定义深浅色命令
DARK_SYSTEM = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 0 /f"
DARK_APPS = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 0 /f"
LIGHT_SYSTEM = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v SystemUsesLightTheme /t REG_DWORD /d 1 /f"
LIGHT_APPS = "reg.exe add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize /v AppsUseLightTheme /t REG_DWORD /d 1 /f

# 检查版本
ver = int(os.popen("ver").read()[28:33]) >= 18362

# 深色切换函数
def dark():
    os.system(DARK_SYSTEM)
    if ver:
        os.system(DARK_APPS)
    return 0

# 浅色切换函数
def light():
    os.system(LIGHT_SYSTEM)
    if ver:
        os.system(LIGHT_APPS)
    return 0
    
# 实时获取时间函数
def time_get():
    global now_time
    while True:
        now_time = time.strftime('%H:%M', time.localtime())

# 计划程序
if __name__ == "__main__":
    get_time = threading.thread(target=time_get)
    get_time.start()
    while True:
        if now_time == '6:00':
            light()
        elif now_time == '20:00'
            dark()

快速切换

你可以自主设计一个前端,通过调用dark()light()切换对应的模式。

而且,听说Windows11在后续的更新中要加入快速切换的按钮。

欢迎光顾我的博客:https://www.hestudio.net

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉、倾城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值