2016-11-13 87 views
1

這就是我想:如何在python中設置桌面背景? (窗口)

import ctypes 
import os 
drive = "F:\\" 
folder = "Keith's Stuff" 
image = "midi turmes.png" 
image_path = os.path.join(drive, folder, image) 
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, image_path, 3) 

Basicaly,這段代碼顯然是應該設置桌面背景,以MIDI turmes.png,它改變了桌面,但是,對於一些奇怪的原因,它總是一個綠色的背景(我在Windows中的個性化設置是圖像背後的綠色背景)我該如何解決這個問題,並使桌面看起來像這樣?:http://i.imgur.com/VqMZF6H.png

+0

你試過使用JPG圖像而不使用PNG嗎? –

+0

Python 2或3?另外嘗試設置函數的argtypes和restype。 –

+0

是的,我試過了。我正在使用python 3.5.2 – BadArtistKeith

回答

1

以下這些適用於我。我使用的是Windows 10的64位和Python 3

import os 
import ctypes 
from ctypes import wintypes 

drive = "c:\\" 
folder = "test" 
image = "midi turmes.png" 
image_path = os.path.join(drive, folder, image) 

SPI_SETDESKWALLPAPER = 0x0014 
SPIF_UPDATEINIFILE = 0x0001 
SPIF_SENDWININICHANGE = 0x0002 

user32 = ctypes.WinDLL('user32') 
SystemParametersInfo = user32.SystemParametersInfoW 
SystemParametersInfo.argtypes = ctypes.c_uint,ctypes.c_uint,ctypes.c_void_p,ctypes.c_uint 
SystemParametersInfo.restype = wintypes.BOOL 
print(SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, image_path, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE)) 

的重要組成部分,是確保如果使用SystemParametersInfoW使用Unicode字符串image_path,和一個字節字符串,如果使用SystemParametersInfoA。請記住,在Python 3中,字符串是默認的Unicode。

同樣設置argtypesrestype也是一種很好的做法。你甚至可以「說謊」並將第三個argtypes參數設置爲c_wchar_pSystemParametersInfoW,然後ctypes將驗證你傳遞的是Unicode字符串而不是字節字符串。

+0

它的工作原理,謝謝! – BadArtistKeith

+0

你能指出一個能解釋到底是什麼的鏈接嗎?我一直在編寫腳本來做窗口事情多年,但這個過程總是感覺隨機。我嘗試了一些,它不起作用,然後我谷歌,直到我找到一個工作片段。當我用大多數語言來做這件事的時候,我實際上學到了一些東西,但是使用奇怪的名字,可信的方法和可怕的混亂,這是Windows API文檔,我無法理解它 – yuvi