I\'m working on a simple (I thought) program to set a different desktop background for every day of the week. It runs with no errors but nothing happens. The path to the ima
This is not an answer to your question, but you can generally minify your program and remove redundancy by doing something like this instead:
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)
I must have read every existing site on this topic and just before giving up, came to this working code (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))
It uses SystemParametersInfoW
instead of SystemParametersInfoA
(W instead of A).
Hope it helps you and many others who seem to have similar problems.
If you are using Python 3 you should use ctypes.windll.user32.SystemParametersInfoW
instead of ctypes.windll.user32.SystemParametersInfoA
(W instead of A as this answer said).
Another answer described that because in Python 3 the str
type is in form of UTF-16 as wchar_t *
in C.
What's more, please minimize the code like this:
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)
Don't Repeat Yourself.