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

发布于 2021-01-29 17:26:27

这是我正在尝试的:

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中的个性化设置是图片后面的绿色背景)如何解决这个问题并使桌面看起来像这样?:http
//i.imgur.com/VqMZF6H.png
关注者
0
被浏览
51
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    以下对我有用。我正在使用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))
    

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

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看