Python实现桌面壁纸设置

本文介绍如何使用Python通过Bing API获取每日壁纸,将其保存至本地,并设置为Windows桌面壁纸,同时实现批处理自动切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python实现桌面壁纸设置

思路

1、通过bing每日壁纸接口,获取图片地址

2、保存图片到绝对路径

3、设置该图片为壁纸

4、批处理壁纸自动切换

第一、获取图片地址

微软bing每日壁纸API接口

https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=zh-CN

每次最多能取8张,只能取最近的16张图片

返回结果:

{

  • images

[

    • {
      • startdate"20211030",
      • fullstartdate"202110301600",
      • enddate"20211031",
      • url"/th?id=OHR.YorkMinster_ZH-CN3129176050_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
      • urlbase"/th?id=OHR.YorkMinster_ZH-CN3129176050",
      • copyright"约克大教堂墙上的怪诞雕塑,英格兰北约克郡 (© John Potter/Alamy)",
      • copyrightlink"约克大教堂 - 国内版 Bing",
      • title"",
      • quiz"/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20211030_YorkMinster%22&FORM=HPQUIZ",
      • wptrue,
      • hsh"e0a38f154f5c47fe4ace4f46f9848db4",
      • drk1,
      • top1,
      • bot1,
      • hs: [ ]

}

],

  • tooltips

{

    • loading"正在加载...",
    • previous"上一个图像",
    • next"下一个图像",
    • walle"此图片不能下载用作壁纸。",
    • walls"下载今日美图。仅限用作桌面壁纸。"

}

}

# 请求网页,跳转到最终 img 地址

def get_img_url():

         idx = random.randint(1,16)

    url = "https://cn.bing.com/HPImageArchive.aspx?format=js&idx={}&n=1&mkt=zh-CN".format(idx)

    r = requests.get(url)

    img_url = "https://cn.bing.com" + r.json()['images'][0]['url'] # 得到图片文件的网址

    print('img_url:', img_url)

    return img_url

第二、保存图片到本地

Win10桌面壁纸路径:

C:\Windows\Web\Wallpaper

在这个目录下我们创建一个mypaper子目录,用来保存子目录

这个函数的作用就是把图片保存到你自己设置的一个目录下,并返回当前目录的绝对地址。

def save_img(img_url):
    # 保存图片到磁盘文件夹dirname中
    try:
        paperdir = "C:/Windows/Web/Wallpaper/mypaper"
        if not os.path.exists(paperdir):
            os.makedirs(paperdir)
        filename = img_url.split("&")[0].split("id=")[1]
        filepath = os.path.join(paperdir, filename)
        # 图片下载,并保存到文件夹中
        urllib.request.urlretrieve(img_url, filepath)
    except IOError as e:
        print('文件操作失败', e)
    except Exception as e:
        print('错误 :', e)
        print("Save", filepath, "successfully!")
    return filepath

第三、设置该图片为壁纸

ctypes 是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。这里利用cypes调用SystemParametersInfo函数来设置桌面的墙纸

函数 SystemParametersInfo 

SystemParametersInfo函数可以获取和设置数量众多的windows系统参数。

函数 SystemParametersInfo 声明如下:

WINUSERAPI

BOOL

WINAPI

SystemParametersInfoA(

    __in UINT uAction,

    __in UINT uParam,

    __inout_opt PVOID pvParam,

    __in UINT fuWinIni);

WINUSERAPI

BOOL

WINAPI

SystemParametersInfoW(

    __in UINT uAction,

    __in UINT uParam,

    __inout_opt PVOID pvParam,

    __in UINT fuWinIni);

#ifdef UNICODE

#define SystemParametersInfo SystemParametersInfoW

#else

#define SystemParametersInfo SystemParametersInfoA

#endif // !UNICODE

各参数的意义如下:

uAction Long,指定要设置的参数。参考uAction常数表

uParam Long,参考uAction常数表

lpvParam Any,按引用调用的Integer、Long和数据结构。

fuWinIni 这个参数规定了在设置系统参数的时候,是否应更新用户设置参数

uAction参数使用方法:

6    设置视窗的大小,SystemParametersInfo(6, 放大缩小值, P, 0),lpvParam为long型

17    开关屏保程序,SystemParametersInfo(17, False, P, 1),uParam为布尔型

13,24    改变桌面图标水平和垂直间距,uParam为间距值(像素),lpvParam为long型

15    设置屏保等待时间,SystemParametersInfo(15, 秒数, P, 1),lpvParam为long型

20    设置桌面背景墙纸,SystemParametersInfo(20, True, 图片路径, 1)

93    开关鼠标轨迹,SystemParametersInfo(93, 数值, P, 1),uParam为False则关闭

97    开关Ctrl+Alt+Del窗口,SystemParametersInfo(97, False, A, 0),uParam为布尔型

通过之前获得的图片所在的绝对路径,把该图片设置为桌面壁纸。

def set_img_as_wallpaper(filepath):

ctypes.windll.user32.SystemParametersInfoW(20, 0, filepath, 0)

第五、批处理自动更换壁纸

此时,可以在python脚本的同一目录下创建名为py_bingying.bat的批处理文件,批处理内容如下:

@echo off

python SetBingImgAsWallpaper.py

创建快捷方式

这里采用开机运行批处理程序实现壁纸的自动切换。

复制快捷方式到下方目录下:

C:\User\yourname\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值