You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10下用Python设置壁纸居中并修改填充背景色

解决Windows壁纸居中+背景色即时生效的问题

我完全懂你遇到的困扰——改完注册表后壁纸样式和背景色要么延迟生效,要么得重启系统才管用,太折腾了。其实我们可以结合Python的ctypes调用Windows API,在修改注册表后立刻通知系统刷新设置,这样所有更改就能即时生效,不用等重启。

核心思路

  1. 先通过注册表设置壁纸的显示样式(居中)、是否平铺,以及背景色;
  2. 调用SystemParametersInfoW设置壁纸文件;
  3. 关键一步:发送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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:56:21