对于64位的Windows,使用以下方法:
ctypes.windll.user32.SystemParametersInfoW
对于32位的Windows系统,请使用以下命令:
ctypes.windll.user32.SystemParametersInfoA
如果使用错误的版本,您将会看到一片黑屏。您可以在
控制面板 -> 系统和安全 -> 系统中查找正在使用的版本。
您也可以让您的脚本自动选择正确的版本:
import struct
import ctypes
PATH = 'C:\\Users\\Patrick\\Desktop\\0200200220.jpg'
SPI_SETDESKWALLPAPER = 20
def is_64bit_windows():
"""Check if 64 bit Windows OS"""
return struct.calcsize('P') * 8 == 64
def changeBG(path):
"""Change background depending on bit size"""
if is_64bit_windows():
ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, PATH, 3)
else:
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, PATH, 3)
changeBG(PATH)
更新:
我在上面犯了一个错误。正如@Mark Tolonen在评论中展示的那样,它取决于ANSI和UNICODE路径字符串,而不是操作系统类型。
如果您使用字节字符串路径,比如b'C:\\Users\\Patrick\\Desktop\\0200200220.jpg'
,请使用:
ctypes.windll.user32.SystemParametersInfoA
否则,您可以使用此选项来处理普通的Unicode路径:
ctypes.windll.user32.SystemParametersInfoW
在@Mark Tolonen的答案中,使用argtypes更好地突出了这一点,另外还有这个答案。