这就是我正在尝试的:
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
答案 0 :(得分: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))
重要的是确保在使用image_path
时使用SystemParametersInfoW
的Unicode字符串,如果使用SystemParametersInfoA
则使用字节字符串。请记住,在Python 3中,字符串是默认的Unicode。
同样设置argtypes
和restype
也是一种好习惯。你甚至可以"谎言"并为c_wchar_p
将第三个argtypes参数设置为SystemParametersInfoW
,然后ctypes将验证您是否传递了Unicode字符串而不是字节字符串。