这是我正在尝试的:
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)
以下对我有用。我正在使用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。
image_path
SystemParametersInfoW
SystemParametersInfoA
这也是很好的做法,设定argtypes和restype为好。您甚至可以“撒谎”并将第三个argtypes参数设置c_wchar_p为for SystemParametersInfoW,然后ctypes将验证您正在传递Unicode字符串而不是字节字符串。
argtypes
restype
c_wchar_p