Как менять обои через 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 шт):

Автор решения: Vetedde

У меня получилось, когда я сделала строку "сырой" и представила в виде байтов:

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

→ Ссылка
Автор решения: gil9red

Несколько лет пользуюсь утилитой для смены обоев из снимков Земли со спутника 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"))

→ Ссылка