通过Python在Windows 10中更改桌面背景

4

我正在为自己做一个小项目,但遇到了困难。我需要在Windows 10 64位系统中更改桌面背景。我尝试使用下面的脚本根据本地图像更改背景。代码执行没有错误,但是桌面只变成黑色。我仔细检查了我的图像路径为c:\CuratedWallpaper\Mario.bmp,所以不是这个问题。

import ctypes

directory = "c:\CuratedWallpaper"
imagePath = directory + "\Mario.bmp"

def changeBG(imagePath):
    SPI_SETDESKWALLPAPER = 20
    ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, imagePath , 0)
    return;

changeBG(imagePath)
1个回答

7

我使用SystemParametersInfoW而不是SystemParametersInfoA,代码如下:

ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 3)

这涉及到ANSI和UNICODE路径字符串的区别。

在Windows 10中,该方法对我有效。


1
你可以解释一下你正在使用的最后一个参数吗? - finngu
1
命令“SystemParametersInfo(20,0,path,3)”在作为脚本无交互方式执行时失败。使用此代码(https://www.coder.work/article/981614),会生成错误1459(根据页面https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--1300-1699-的ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION)。在我的情况下,创建一个指向批处理文件的链接,该批处理文件执行Python脚本并安装到“C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”。 - Nelbren
2
@finngu,3 似乎是 SPIF_UPDATEINIFILE | SPIF_SENDCHANGE。第一个常量“将新的系统范围参数设置写入用户配置文件。” 第二个常量“在更新用户配置文件后广播 WM_SETTING­CHANGE 消息。” https://devblogs.microsoft.com/oldnewthing/20160721-00/?p=93925 - StSav012
@StSav012 谢谢您提供的额外信息! - finngu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接