Windows 10下用Python设置壁纸居中并修改填充背景色
解决Windows壁纸居中+背景色即时生效的问题
我完全懂你遇到的困扰——改完注册表后壁纸样式和背景色要么延迟生效,要么得重启系统才管用,太折腾了。其实我们可以结合Python的ctypes调用Windows API,在修改注册表后立刻通知系统刷新设置,这样所有更改就能即时生效,不用等重启。
核心思路
- 先通过注册表设置壁纸的显示样式(居中)、是否平铺,以及背景色;
- 调用
SystemParametersInfoW设置壁纸文件; - 关键一步:发送
WM_SETTINGCHANGE消息通知系统,让它重新读取注册表的新设置,这样背景色和壁纸样式会立刻生效。
完整实现代码
import winreg import ctypes from ctypes import wintypes # 定义需要的Windows API user32 = ctypes.WinDLL('user32', use_last_error=True) # 定义SendMessageTimeoutW的参数类型 user32.SendMessageTimeoutW.argtypes = [ wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPCWSTR, wintypes.UINT, wintypes.UINT, wintypes.PDWORD ] user32.SendMessageTimeoutW.restype = wintypes.LRESULT WM_SETTINGCHANGE = 0x001A SMTO_ABORTIFHUNG = 0x0002 HWND_BROADCAST = 0xFFFF def set_reg(reg_path, name, value): try: winreg.CreateKey(winreg.HKEY_CURRENT_USER, reg_path) registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path, 0, winreg.KEY_WRITE) winreg.SetValueEx(registry_key, name, 0, winreg.REG_SZ, value) winreg.CloseKey(registry_key) return True except WindowsError as e: print(f"注册表修改失败: {e}") return False def refresh_system_settings(): # 发送消息通知系统设置已更改 result = user32.SendMessageTimeoutW( HWND_BROADCAST, WM_SETTINGCHANGE, 0, "Environment", SMTO_ABORTIFHUNG, 5000, None ) if result == 0: print("刷新系统设置失败") else: print("系统设置已刷新") # 1. 设置背景色(这里是黑色,格式为"R G B") set_reg(r"Control Panel\Colors", "Background", "0 0 0") # 2. 设置壁纸样式:0=居中,10=拉伸,2=平铺等 set_reg(r"Control Panel\Desktop", "WallpaperStyle", "0") # 3. 设置是否平铺:0=不平铺,1=平铺 set_reg(r"Control Panel\Desktop", "TileWallpaper", "0") # 4. 设置壁纸文件路径(替换成你的壁纸路径) wallpaper_path = r"C:\path\to\your\wallpaper.jpg" SPI_SETDESKWALLPAPER = 20 user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, wallpaper_path, 0) # 5. 关键:刷新系统设置,让更改即时生效 refresh_system_settings()
关键说明
- 壁纸样式参数:
WallpaperStyle的可选值:0(居中)、2(平铺)、10(拉伸)、6(适应)、11(填充),可以根据需求调整; - 背景色格式:必须是
"R G B"的字符串,比如白色是"255 255 255"; - 刷新机制:
SendMessageTimeoutW发送广播消息,让系统的所有窗口都重新读取设置,这一步是解决延迟/重启问题的核心,之前的代码就是缺少了这个步骤; - 路径注意:壁纸路径要用原始字符串(
r""),避免转义字符问题,而且路径必须是存在的图片文件。
这样操作后,壁纸会立刻居中显示,背景色也会马上生效,完全不需要重启系统。
内容的提问来源于stack exchange,提问作者DeepKling
相关产品推荐
相关产品推荐

