Creando un cambiador de fondo en python con ctypes, no funciona

Estoy trabajando en un progtwig simple (pensé) para establecer un fondo de escritorio diferente para cada día de la semana. Se ejecuta sin errores pero no pasa nada. El camino a las imágenes es válido. ¿Algunas ideas?

import time; import ctypes; SPI_SETDESKWALLPAPER = 20 localtime = time.localtime(time.time()) wkd = localtime[6] if wkd == 6: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\1.jpg",0) elif wkd == 0: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\2.jpg",0) elif wkd == 1: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\3.jpg",0) elif wkd == 2: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\4.jpg",0) elif wkd == 3: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\5.jpg",0) elif wkd == 4: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\6.jpg",0) elif wkd == 5: ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER,0,r"C:\Users\Owner\Documents\Wallpaper\7.jpg",0) 

Debo haber leído todos los sitios existentes sobre este tema y, justo antes de rendirme, llegué a este código de trabajo (win7 pro 64 bit, python 3.4)

 import ctypes SPI_SETDESKWALLPAPER = 0x14 #which command (20) SPIF_UPDATEINIFILE = 0x2 #forces instant update src = r"D:\Downloads\_wallpapers\3D-graphics_Line_025147_.jpg" #full file location #in python 3.4 you have to add 'r' before "path\img.jpg" print(ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, src, SPIF_UPDATEINIFILE)) #SystemParametersInfoW instead of SystemParametersInfoA (W instead of A) 

Esta no es una respuesta a su pregunta, pero generalmente puede minimizar su progtwig y eliminar la redundancia haciendo algo como esto en su lugar:

 import time; import ctypes; SPI_SETDESKWALLPAPER = 20 wallpapers = [ r"C:\Users\Owner\Documents\Wallpaper\1.jpg", r"C:\Users\Owner\Documents\Wallpaper\2.jpg", r"C:\Users\Owner\Documents\Wallpaper\3.jpg", r"C:\Users\Owner\Documents\Wallpaper\4.jpg", r"C:\Users\Owner\Documents\Wallpaper\5.jpg", r"C:\Users\Owner\Documents\Wallpaper\6.jpg", r"C:\Users\Owner\Documents\Wallpaper\7.jpg", ] localtime = time.localtime(time.time()) wkd = localtime[6] ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, wallpapers[wkd], 0) 

Si está utilizando Python 3, debería usar ctypes.windll.user32.SystemParametersInfoW lugar de ctypes.windll.user32.SystemParametersInfoA (W en lugar de A como dice esta respuesta ). Otra respuesta describió que debido a que en Python 3, el tipo str está en forma de UTF-16 como wchar_t * en C.

Además, minimiza el código de esta manera:

 import time; import ctypes; SPI_SETDESKWALLPAPER = 20 wallpapers = r"C:\Users\Owner\Documents\Wallpaper\%d.jpg" localtime = time.localtime(time.time()) wkd = localtime[6] ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, wallpapers%(wkd+1), 0) 

No te repitas.