¿Cómo configuro el fondo de escritorio en python? (ventanas)

Esto es lo que estoy intentando:

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) 

Básicamente, este código obviamente debe configurar el fondo del escritorio a midi turmes.png, cambia el escritorio, sin embargo, por alguna extraña razón, siempre es un fondo verde (mi configuración personalizada en Windows es un fondo verde detrás de la imagen) cómo ¿Arreglo esto y hago que el escritorio se vea así ?: http://sofes.miximages.com/ctypes/VqMZF6H.png

Lo siguiente funciona para mí. Estoy usando Windows 10 de 64 bits y 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)) 

La parte importante es asegurarse de usar una cadena Unicode para image_path si usa SystemParametersInfoW , y una cadena de bytes si usa SystemParametersInfoA . Recuerda que en Python 3 las cadenas son Unicode por defecto.

También es una buena práctica establecer argtypes y restype también. Incluso puede “mentir” y establecer el tercer parámetro argtypes en c_wchar_p para SystemParametersInfoW y luego ctypes validará que está pasando una cadena Unicode y no una cadena de bytes.