Для 64-битных окон используйте:
ctypes.windll.user32.SystemParametersInfoW
для 32-битных окон, используйте:
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)
Обновление:
Я упустил из виду вышесказанное.Как показал @ Марк Толонен в комментариях, это зависит от строк пути ANSI и UNICODE, а не от типа ОС.
Если вы используете пути строк байтов, такие как b'C:\\Users\\Patrick\\Desktop\\0200200220.jpg'
, используйте:
ctypes.windll.user32.SystemParametersInfoA
В противном случае вы можете использовать это для обычных путей Unicode:
ctypes.windll.user32.SystemParametersInfoW
Это также лучше подчеркивается с помощью argtypes в ответе @ Марка Толонена , а также в этом другом ответе .