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",
- wp: true,
- hsh: "e0a38f154f5c47fe4ace4f46f9848db4",
- drk: 1,
- top: 1,
- bot: 1,
- 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\开始菜单\程序\启动