python替换win10壁纸: 对网上主流方法的补充
侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计收到 7 条评论
    已存活 146231316

python替换win10壁纸: 对网上主流方法的补充

jacksen168
2022-10-22 / 0 评论 / 19 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年01月05日,已超过476天没有更新,若内容或图片失效,请留言反馈。

主流方法代码缺陷

当你的win10在个性化中设置成纯色壁纸时(偶尔需要重启电脑后),主流方法就会失效。在个性化界面看的到替换变化,但桌面没有半点反应。

过程

终于在我废寝忘食的找了一天资料,测试了一遍又一遍后...在代码中加了一行代码解决了所有问题......

问题说明

这次我也不知道是不是网上主流方法的问题,在那么多遍的测试中,我只得出来一条结论:微软你就是歌姬吧。
问题所在:微软在winXP时的旧代码一直屯到现在。导致win10的壁纸显示规则十分的混乱,壁纸更换涉及到注册表的8个值和一个文件夹里的配置文件,更换壁纸的方法数不胜数,并且他们之间还互相干扰,令人头疼。最后我在注册表 HKEY_CURRENT_USER\Control Panel\Desktop 里的 wallpaper 值里加上图片路径才解决这个问题。这样改就最贴合从个性化里手动点击修改了。

代码

import os, win32gui, win32con, win32api


def set_wallpaper(img_path):
    # 打开指定注册表路径
    reg_key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)
    # 最后的参数:2拉伸,0居中,6适应,10填充,0平铺
    win32api.RegSetValueEx(reg_key, "WallpaperStyle", 0, win32con.REG_SZ, "10")
    # 最后的参数:1表示平铺,拉伸居中等都是0
    win32api.RegSetValueEx(reg_key, "TileWallpaper", 0, win32con.REG_SZ, "0")
    # 通过注册表来修改壁纸(更贴进手动设置,比下面那个优先级要高。可避免背景设置成纯色重启电脑后,出现无法更换壁纸的情况)
    win32api.RegSetValueEx(reg_key, "WallPaper", 0, win32con.REG_SZ, img_path.replace('/', '\\'))
    # 注意上方的 img_path.replace('/', '\\') 是将url的"/"线换成"\"线,注册表只认"\"线
    # 刷新桌面与设置壁纸
    win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, img_path, win32con.SPIF_SENDWININICHANGE)


# 注意路径书写问题; "/"左滑线,"\"右滑线都可以
img_path = "C:/Pictures/win10.jpg"

# 切换时要检查一下图片是否存在
if os.path.exists(img_path):
    print('壁纸切换成功:' + img_path)
    set_wallpaper(img_path)
else:
    print('图片不存在,切换失败')

注意事项

win32api.RegSetValueEx(reg_key, "WallPaper", 0, win32con.REG_SZ, img_path.replace('/', '\\'))

里的片段: img_path.replace('/', '\\') 是将img_path路径的"/"线换成"\",注册表只认"\"线

原主流代码

import os, win32gui, win32con, win32api


def set_wallpaper(img_path):
    # 打开指定注册表路径
    reg_key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)
    # 最后的参数:2拉伸,0居中,6适应,10填充,0平铺
    win32api.RegSetValueEx(reg_key, "WallpaperStyle", 0, win32con.REG_SZ, "10")
    # 最后的参数:1表示平铺,拉伸居中等都是0
    win32api.RegSetValueEx(reg_key, "TileWallpaper", 0, win32con.REG_SZ, "0")
    # 刷新桌面与设置壁纸
    win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, img_path, win32con.SPIF_SENDWININICHANGE)


# 注意路径书写问题
img_path = "C:/Pictures/win10.jpg"

# 切换时要检查一下图片是否存在
if os.path.exists(img_path):
    set_wallpaper(img_path)
else:
    print('图片不存在,切换失败')
0

评论 (0)

取消