主流方法代码缺陷
当你的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)