初始提交
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import ctypes
|
||||
import os
|
||||
import logging
|
||||
from ctypes import wintypes
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
SPI_SETDESKWALLPAPER = 0x0014
|
||||
SPIF_UPDATEINIFILE = 0x01
|
||||
SPIF_SENDWININICHANGE = 0x02
|
||||
|
||||
FILL_STYLES = {
|
||||
"fill": {"WallpaperStyle": "10", "TileWallpaper": "0"},
|
||||
"fit": {"WallpaperStyle": "6", "TileWallpaper": "0"},
|
||||
"stretch": {"WallpaperStyle": "2", "TileWallpaper": "0"},
|
||||
"tile": {"WallpaperStyle": "0", "TileWallpaper": "1"},
|
||||
"center": {"WallpaperStyle": "0", "TileWallpaper": "0"},
|
||||
}
|
||||
|
||||
|
||||
def set_fill_style(style: str) -> None:
|
||||
import winreg
|
||||
|
||||
values = FILL_STYLES.get(style)
|
||||
if not values:
|
||||
values = FILL_STYLES["fill"]
|
||||
|
||||
try:
|
||||
key = winreg.OpenKey(
|
||||
winreg.HKEY_CURRENT_USER,
|
||||
r"Control Panel\Desktop",
|
||||
0,
|
||||
winreg.KEY_SET_VALUE,
|
||||
)
|
||||
winreg.SetValueEx(key, "WallpaperStyle", 0, winreg.REG_SZ, values["WallpaperStyle"])
|
||||
winreg.SetValueEx(key, "TileWallpaper", 0, winreg.REG_SZ, values["TileWallpaper"])
|
||||
winreg.CloseKey(key)
|
||||
logger.info("Fill style set to: %s", style)
|
||||
except Exception as e:
|
||||
logger.error("Failed to set fill style: %s", e)
|
||||
|
||||
|
||||
def set_wallpaper(image_path: str, fill_style: str = "fill") -> bool:
|
||||
if not os.path.exists(image_path):
|
||||
logger.error("Image not found: %s", image_path)
|
||||
return False
|
||||
|
||||
set_fill_style(fill_style)
|
||||
|
||||
abs_path = os.path.abspath(image_path)
|
||||
result = ctypes.windll.user32.SystemParametersInfoW(
|
||||
SPI_SETDESKWALLPAPER,
|
||||
0,
|
||||
abs_path,
|
||||
SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE,
|
||||
)
|
||||
|
||||
if result:
|
||||
logger.info("Wallpaper set: %s", abs_path)
|
||||
else:
|
||||
logger.error("Failed to set wallpaper: %s", abs_path)
|
||||
|
||||
return bool(result)
|
||||
Reference in New Issue
Block a user