如何在Python中设置桌面背景? (窗户)

问题描述 投票:0回答:1

这就是我正在尝试的:

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)

基本上,这段代码显然应该将桌面背景设置为midi turmes.png,它改变了桌面,但是,由于某些奇怪的原因,它始终是绿色背景(我在Windows中的个性化设置是图像后面的绿色背景)我该如何解决这个问题并使桌面看起来像这样?:https://i.stack.imgur.com/MRJ1H.png

python ctypes
1个回答
6
投票

以下内容对我有用。我使用的是 Windows 10 64 位和 Python 3。

import os
import ctypes as ct
import ctypes.wintypes as w

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

def boolcheck(result, func, args):
    if not result:
        raise ct.WinError(ct.get_last_error())
    return None

user32 = ct.WinDLL('user32', use_last_error=True)
SystemParametersInfo = user32.SystemParametersInfoW
SystemParametersInfo.argtypes = w.UINT, w.UINT, w.LPVOID, w.UINT
SystemParametersInfo.restype = w.BOOL
SystemParametersInfo.errcheck = boolcheck

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, image_path, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE)

重要的部分是,如果使用

image_path
,请确保对
SystemParametersInfoW
使用 Unicode 字符串;如果使用
SystemParametersInfoA
,则确保使用字节字符串。请记住,Python 3 中的字符串是默认的 Unicode。

设置

argtypes
restype
也是一个好习惯。您甚至可以“撒谎”并将第三个 argtypes 参数设置为
c_wchar_p
(对于
SystemParametersInfoW
),然后 ctypes 将验证您传递的是 Unicode 字符串而不是字节字符串。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.