小编典典

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

python

这是我正在尝试的:

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中的个性化设置是图片后面的绿色背景)如何解决这个问题并使桌面看起来像这样?:http
//i.imgur.com/VqMZF6H.png

阅读 208

收藏
2020-12-20

共1个答案

小编典典

以下对我有用。我正在使用Windows 10 64位和Python 3。

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))

重要的是要确保使用Unicode字符串(image_path如果使用SystemParametersInfoW)和字节字符串(如果使用)SystemParametersInfoA。请记住,在Python
3中,字符串是默认的Unicode。

这也是很好的做法,设定argtypesrestype为好。您甚至可以“撒谎”并将第三个argtypes参数设置c_wchar_p为for
SystemParametersInfoW,然后ctypes将验证您正在传递Unicode字符串而不是字节字符串。

2020-12-20