Как менять обои через Python?
Я сидел и мне пришла идейка: менять обои через Python загруженный в startup. Я придумал, что найду 8 одинаковых картинок в инете на день, ночь каждого времени года и они будут сами сменяться. Я придумал алг. скелет. Я не придумал одного: как мне заставить python менять мои обои. Я нарыл в интернете следующий код, но автор жалуется, что его Раб. Стол становится чёрным. Как это исправить?
import ctypes
directory = "c:\CuratedWallpaper"
imagePath = directory + "\Mario.bmp"
def changeBG(imagePath):
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, imagePath , 0)
return;
changeBG(imagePath)
Ответы (3 шт):
У меня получилось, когда я сделала строку "сырой" и представила в виде байтов:
import os
import ctypes
folder = r"C:\folder"
file_name = r"back.jpg"
full_path = os.path.join(folder, file_name)
wallpaper = bytes(full_path, 'utf-8')
ctypes.windll.user32.SystemParametersInfoA(20, 0, wallpaper, 3)
Если я не ошибаюсь, эта функция не поддерживает .bmp файлы (.jpg работает на ура)
И если у тебя 64 битная арихтектура, замени букву A на w в SystemParametersInfoA
Несколько лет пользуюсь утилитой для смены обоев из снимков Земли со спутника himawari, функция такая:
def set_wallpaper(path: str) -> int:
cs = ctypes.c_buffer(path.encode())
spi_setdeskwallpaper = 0x14
return ctypes.windll.user32.SystemParametersInfoA(spi_setdeskwallpaper, 0, cs, 0)
Картинку сохраняю в JPG по пути ~/Pictures/Himawari/wallpaper.jpg. Полный путь у меня без кириллицы (имя юзера на английском), поэтому с функцией SystemParametersInfoA проблем не было, но есть вероятность, что в случаи с кириллицей могут быть проблемы, тогда использовать SystemParametersInfoW (и думаю еще path.encode("utf-8"))