【问题标题】:Setting windows wallpaper with python not working用python设置windows墙纸不起作用
【发布时间】:2014-10-04 18:56:10
【问题描述】:

下面的python代码应该从网上下载一个BMP图像并将其保存到磁盘,然后将壁纸更改为下载的图像。壁纸更改应该是永久性的,即重新启动后不会恢复。这个函数是我使用 pyinstaller 编译成二进制 exe 的较大脚本的一部分。问题是,当我运行程序时,应该更改墙纸的位不起作用,而我正在努力找出原因。有趣的是,如果我在 python 解释器中运行这个确切的代码,它会按预期工作。此外,在先前版本的编译脚本中,壁纸更改工作顺利。任何 cmets、帮助、见解将不胜感激!

def wallpaper():
    try:
        os.chdir(launch_directory)
        urllib.urlretrieve('http://www.imagehost.com/image.bmp', 'image.bmp')
        ctypes.windll.user32.SystemParametersInfoA(20, 0, os.path.join(launch_directory, "image.bmp"), 1)
    except:
        pass

【问题讨论】:

  • 您遇到异常了吗?您正在默默地传递它,可能值得输出任何可用的异常信息。检查 SystemParametersInfo 的返回类型。如果找不到图像,那会告诉你。它应该返回 TRUE。
  • 尝试把SystemParametersInfoA的最后一个参数改成2(SPIF_SENDCHANGE)

标签: python windows ctypes


【解决方案1】:

对于 Linux refer 如下:-

import commands
command = "gconftool-2 --set /desktop/gnome/background/picture_filename --type string '/path/to/file.jpg'"
status, output = commands.getstatusoutput(command)  # status=0 if success

对于以下窗口refer:-

import ctypes
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "myimage.jpg" , 0)

【讨论】:

  • 谢谢,但我只需要 Windows,而不是 Linux。
  • 这与我尝试过的代码相同(参考问题),但它不起作用。这就是我发布问题的原因,我知道代码应该是什么,但它不起作用,我需要帮助找出原因。
  • 路径正确。 os.path.join(launch_directory, "image.bmp") 返回位于 launch_directory 中的 image.bmp 的绝对路径。即使我手动输入绝对路径仍然没有。 :(
  • @DarthCoder,如果您使用的是 Python 3,请致电 windll.user32.SystemParametersInfoW。确保使用绝对路径。
【解决方案2】:

将“SystemParametersInfoA”更改为“SystemParametersInfoW”。这为我修复了桌面背景更新。

【讨论】:

    【解决方案3】:

    是的,我知道我正在从 2014 年开始挖掘这个线程(哇!),但是遇到了同样的问题,我花了几个小时找出解决方案,这里是: 由于.SystemParametersInfoW 给我留下了黑色桌面,我决定坚持使用.SystemParametersInfoA,但使用cgi 模块将路径变量编码为us-ascii。我编写了以下函数,它最终像一个魅力一样工作:

    import ctypes as c
    import cgi
    def set_as_wallpaper(path): 
        SPI = 20
        SPIF = 2
        return c.windll.user32.SystemParametersInfoA(SPI, 0, path.encode("us-ascii"), SPIF)
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多