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

Bad*_*ith 2 python ctypes

这就是我正在尝试的:

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)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*nen 5

以下内容对我有用。我使用的是 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))
Run Code Online (Sandbox Code Playgroud)

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

设置argtypes和也是很好的做法restype。您甚至可以“撒谎”并将第三个 argtypes 参数设置为c_wchar_pfor SystemParametersInfoW,然后 ctypes 将验证您传递的是 Unicode 字符串而不是字节字符串。

  • 你能指出一个链接来解释到底是什么吗?多年来我一直在编写脚本来执行 Windows 操作,但这个过程总是感觉很随机。我尝试了一些东西,它不起作用,然后我用谷歌搜索,直到找到一个有效的片段。当我使用大多数语言执行此操作时,我实际上一路上学到了一些东西,但是由于 Windows API 文档的怪异名称、复杂的方法和可怕的混乱,我无法理解它 (5认同)