在Python3中更改Windows10背景

2024-04-29 13:44:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试通过python脚本找到更改windows10桌面墙纸的最佳方法。当我尝试运行此脚本时,桌面背景将变为纯黑色。在

import ctypes

path = 'C:\\Users\\Patrick\\Desktop\\0200200220.jpg'

def changeBG(path):
    SPI_SETDESKWALLPAPER = 20
    ctypes.windll.user32.SystemParametersInfoA(20, 0, path, 3)
    return;

changeBG(path)

我能做些什么来解决这个问题?我用的是Python3


Tags: path方法import脚本defctypesusersjpg
2条回答

SystemParametersInfoA采用ANSI字符串(Python3中的bytes类型)。在

SystemParametersInfoW采用Unicode字符串(python3中的str类型)。在

所以使用:

path = b'C:\\Users\\Patrick\\Desktop\\0200200220.jpg'
ctypes.windll.user32.SystemParametersInfoA(20, 0, path, 3)

或者:

^{pr2}$

您可以设置argtypes来执行参数检查。第三个参数被记录为LPVOID,但您可以更具体地进行类型检查:

from ctypes import *
windll.user32.SystemParametersInfoW.argtypes = c_uint,c_uint,c_wchar_p,c_uint
windll.user32.SystemParametersInfoA.argtypes = c_uint,c_uint,c_char_p,c_uint

对于64位windows,请使用:

ctypes.windll.user32.SystemParametersInfoW

对于32位窗口,请使用:

^{pr2}$

如果你用错了,就会出现黑屏。您可以在控制面板->系统和安全->系统中找到您使用的版本。在

您还可以让脚本选择正确的脚本:

import struct
import ctypes

PATH = 'C:\\Users\\Patrick\\Desktop\\0200200220.jpg'
SPI_SETDESKWALLPAPER = 20

def is_64bit_windows():
    """Check if 64 bit Windows OS"""
    return struct.calcsize('P') * 8 == 64

def changeBG(path):
    """Change background depending on bit size"""
    if is_64bit_windows():
        ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, PATH, 3)
    else:
        ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, PATH, 3)

changeBG(PATH)

更新:

我犯了一个以上的疏忽。正如注释中的@Mark Tolonen所示,它依赖于ANSI和UNICODE路径字符串,而不是OS类型。在

如果使用字节字符串路径,例如b'C:\\Users\\Patrick\\Desktop\\0200200220.jpg',请使用:

^{pr2}$

否则,您可以将其用于普通unicode路径:

ctypes.windll.user32.SystemParametersInfoW

使用@Mark Tolonen's应答中的argtypes,以及另一个answer中的argtypes,也可以更好地突出显示这一点。在

相关问题 更多 >