2014-10-04 39 views
2

下面一段python代碼應該從web下載BMP圖像並將其保存到磁盤,然後將壁紙更改爲下載的圖像。壁紙變化應該是永久性的,即重新啓動後不能恢復。這個函數是我使用pyinstaller編譯成二進制exe的大腳本的一部分。問題是,當我運行該程序時,應該更換壁紙的位不起作用,並且我正努力想弄明白爲什麼。有趣的是,如果我在python解釋器中運行這個確切的代碼,它按預期工作。此外,在編譯腳本的以前版本中,壁紙更換工作順利。任何意見,幫助,見解將不勝感激!使用python設置windows壁紙不工作

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 
+0

嘗試將'SystemParametersInfoA'的最後一個參數更改爲'2'('SPIF_SENDCHANGE') – 2014-10-05 10:19:27

+0

您是否收到異常?你默默地傳遞它可能值得輸出任何可用的異常信息。檢查SystemParametersInfo的返回類型。如果找到圖像時遇到問題,那會告訴你。它應該返回TRUE。 – Brad 2014-10-04 19:11:57

回答

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) 
+0

謝謝,但我只需要這個窗口,而不是Linux。 – 2014-10-04 19:05:32

+0

Dath,請參考最新的答案 – 2014-10-04 19:11:16

+0

這和我試過的代碼一樣(參考問題),它不起作用。這就是爲什麼我發佈這個問題,我知道代碼應該是什麼,但它不工作,我需要幫助找出原因。 – 2014-10-04 19:21:01

1

改變 「SystemParametersInfoA」 到 「SystemParametersInfoW」。這爲我修復了桌面背景更新。

1

是的,我知道我正在從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) 

希望它有幫助!