【问题标题】:Set Windows Wallpaper fit/span/position using Python Script使用 Python 脚本设置 Windows 壁纸适合/跨度/位置
【发布时间】:2022-04-07 23:30:38
【问题描述】:

有很多关于如何使用python脚本更改桌面墙纸的问题和文章。如下:

file = "---path---"
SPI_SETDESKWALLPAPER = 20
ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, file , 0)

但是,此代码不会更改墙纸位置。它只会更改墙纸文件。比如说,早期的壁纸被定位为“填充”。然后新壁纸也将设置为“填充”。我们必须根据我们的要求手动将该位置更改为适合/填充/跨度/平铺/居中。

有一个文档 here 讨论了使用 DESKTOP_WALLPAPER_POSITION enumeration (shobjidl_core.h) 使用 C++ 函数更改壁纸位置。

但是,我无法在 python 中使用它。

有人可以帮助我并指出正确的方向吗?

我们可以使用 python 脚本更改壁纸的适合位置吗?我们如何将该参数传递给上面的代码?

【问题讨论】:

    标签: python-3.x windows wallpaper desktop-wallpaper


    【解决方案1】:

    您只需修改 2 个注册表值。并且需要设置壁纸才能生效。

    import winreg, ctypes, win32con
    
    FILL,FIT,STRETCH,TILE,CENTER,SPAN = 0,1,2,3,4,5
    MODES = (0,10),(0,6),(0,2),(1,0),(0,0),(0,22)
    value1,value2 = MODES[FILL] # choose mode here
    
    key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Control Panel\Desktop", 0, winreg.KEY_WRITE)
    winreg.SetValueEx(key, "TileWallpaper", 0, winreg.REG_SZ, str(value1))
    winreg.SetValueEx(key, "WallpaperStyle", 0, winreg.REG_SZ, str(value2))
    winreg.CloseKey(key)
    
    def setWallpaper(path):
        changed = win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE
        ctypes.windll.user32.SystemParametersInfoW(win32con.SPI_SETDESKWALLPAPER,0,path,changed)
    
    setWallpaper("C:/absolute/path/to/your/image.jpg")
    

    【讨论】:

    • 嘿。是的,这可以工作。但我需要一个类似于我们使用提到的 python 代码设置 wallpeper 的解决方案。不想使用注册表。有什么方法可以使用系统参数来做到这一点?
    • @Meet 我知道的唯一其他方法是使用 dll。请参阅此answer。尽管他们只是使用SetWallpaper 而不是SetPosition。另请参阅此github 以获取指向 dll 的链接。我认为只是自己更改注册表是迄今为止最简单的解决方案。如果有人制作了一个库,那可能就是他们在下面做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    相关资源
    最近更新 更多