如何在python中设置桌面背景?(窗口)

如何在python中设置桌面背景?(窗口),python,ctypes,Python,Ctypes,这就是我正在尝试的: import ctypes import os drive = "F:\\" folder = "Keith's Stuff" image = "midi turmes.png" image_path = os.path.join(drive, folder, image) SPI_SETDESKWALLPAPER = 20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, image_

这就是我正在尝试的:

import ctypes
import os
drive = "F:\\"
folder = "Keith's Stuff"
image = "midi turmes.png"
image_path = os.path.join(drive, folder, image)
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, image_path, 3)

基本上,这段代码显然应该将桌面背景设置为midi turmes.png,它会更改桌面,但是,由于一些奇怪的原因,它总是绿色背景(我在windows中的个性化设置是图像后面的绿色背景),我如何修复此问题并使桌面看起来像这样?:

以下内容适合我。我使用的是Windows1064位和Python3

import os
import ctypes
from ctypes import wintypes

drive = "c:\\"
folder = "test"
image = "midi turmes.png"
image_path = os.path.join(drive, folder, image)

SPI_SETDESKWALLPAPER  = 0x0014
SPIF_UPDATEINIFILE    = 0x0001
SPIF_SENDWININICHANGE = 0x0002

user32 = ctypes.WinDLL('user32')
SystemParametersInfo = user32.SystemParametersInfoW
SystemParametersInfo.argtypes = ctypes.c_uint,ctypes.c_uint,ctypes.c_void_p,ctypes.c_uint
SystemParametersInfo.restype = wintypes.BOOL
print(SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, image_path, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE))
重要的一点是,如果使用
systemparameters sinfow
,确保为
image\u路径
使用Unicode字符串,如果使用
systemparameters sinfoa
,确保为字节字符串。请记住,在Python3中,字符串是默认的Unicode


设置
argtypes
restype
也是一种很好的做法。您甚至可以“撒谎”并将
systemparameters sinfow
的第三个argtypes参数设置为
c\u wchar\u p
,然后ctypes将验证您传递的是Unicode字符串而不是字节字符串。

您是否尝试过使用JPG图像而不是PNG?Python 2或3?还可以尝试为函数设置argtypes和restype。是的,我试过了。我使用的是Python3.5.2,我在shell中使用它。该命令似乎将背景更改为纯色,而不是使用图像(您甚至可以打开外壳旁边的背景设置并查看其实时更改),我认为这与Windows 10有关。我在玩剧本,但它对我也不起作用。你的代码会在这里弹出一些问题,但是他们都和你一样使用它。由于它对我也不起作用,微软可能在Windows10中做了一些改变(甚至可能是最后一次更新),你能指出一个链接来解释到底是什么吗?多年来,我一直在编写用于windows操作系统的脚本,但这个过程总是让人感觉随机的。我尝试了一些不起作用的东西,然后我在谷歌上搜索,直到找到一个有用的片段。当我对大多数语言这样做的时候,我实际上在这一过程中学到了一些东西,但是对于那些奇怪的名字、复杂的方法和令人毛骨悚然的乱七八糟的Windows API文档,我简直无法理解它们