已经开学了,但是疫情原因回不了学校,心想这个假期舒服啊,现实:钉钉、腾讯课堂、雨课堂、超星 ……啊啊啊啊~~~简直不要不要的,要在家被课表安排了。每周的课表还可能不一样,防止不小心忘记课程就翘了课,那不是得时不时就翻翻课表嘛,太难了。要是每次都去学校网站查,那得多麻烦,要是截了图保存,那每次去翻那不是也很累,不如把课表搞在壁纸上,在让电脑自个看着时间换一下,那岂不是极好的。
在这之前,需要安装一个库,pywin32
pip3 install pywin32
Windows API可以参考这篇优秀的博文
首先,弄一个换壁纸的函数:
import win32api
import win32con
import win32gui
from PIL import Image
def setWallpaper(image_path):
key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)
win32api.RegSetValueEx(key, "WallpaperStyle", 0, win32con.REG_SZ, "2")
win32api.RegSetValueEx(key, "TileWallpaper", 0, win32con.REG_SZ, "0")
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, image_path, 1 + 2)
def setWallPaperBMP(imagePath):
bmpImage = Image.open(imagePath)
newPath = imagePath.replace('.jpg', '.bmp')
bmpImage.save(newPath, "BMP")
setWallpaper(newPath)
以上两个函数可以参考这篇优秀的博文
接下来就是设计一下主体函数,弄一个更换规则
先来获取当前日期是在开学第几周
import time
def get_imgid():
start_time = '2020 2 17'
start = time.strptime(start_time, '%Y %m %d')
start_days = int(time.strftime('%j', start))
now_days = int(time.strftime('%j', time.localtime()))
img_id = 1 + (now_days - start_days)//7
return img_id
由于我们的课表每个周都可能会不一样,所以就得按周来换壁纸。开学时间是2月17,那么这就是第一周开始的时间。
要让程序根据时间判断当下是第几周,可以这样来:2月17为起始日期,每过7天,周数加一,那么就需要用到 time库 ,那就用格式 ‘%j’ 吧,它能把你给定的日期转化为 当年的第几天,那么就好办了。
函数返回的是计算所得的周数,阿拉伯数字[…-1,0,1,2,3,4,5…],这是在开学前写好的,所以会有负数的情况。
接着就可以更换对应的壁纸了
import os.path as op
import sys
def ch_wallpaper(img_id):
if img_id <= 0:
img_id = 1
img_name = f'第{img_id}周.png'
imgs_path = r'c:\users\pxo\desktop\课表'
img_path = op.join(imgs_path, img_name)
if not op.exists(img_path):
return None
setWallpaper(img_path)
if __name__ == '__main__':
img_id = get_imgid()
print(img_id)
ch_wallpaper(img_id)
sys.exit()
壁纸【课表】是预先存好的,按照 第n周.png 的格式存储,放在同一文件夹。
以下是完整代码(自行取用)
import win32api
import win32con
import win32gui
import os.path as op
import time
from PIL import Image
import sys
def setWallpaper(image_path):
key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)
win32api.RegSetValueEx(key, "WallpaperStyle", 0, win32con.REG_SZ, "2")
win32api.RegSetValueEx(key, "TileWallpaper", 0, win32con.REG_SZ, "0")
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, image_path, 1 + 2)
def setWallPaperBMP(imagePath):
bmpImage = Image.open(imagePath)
newPath = imagePath.replace('.jpg', '.bmp')
bmpImage.save(newPath, "BMP")
setWallpaper(newPath)
def get_imgid():
start_time = '2020 2 17'
start = time.strptime(start_time, '%Y %m %d')
start_days = int(time.strftime('%j', start))
now_days = int(time.strftime('%j', time.localtime()))
img_id = 1 + (now_days - start_days)//7
return img_id
def ch_wallpaper(img_id):
if img_id <= 0:
img_id = 1
img_name = f'第{img_id}周.png'
imgs_path = r'c:\users\pxo\desktop\课表'
img_path = op.join(imgs_path, img_name)
if not op.exists(img_path):
return None
setWallpaper(img_path)
if __name__ == '__main__':
img_id = get_imgid()
print(img_id)
ch_wallpaper(img_id)
sys.exit()
那么问题来了,代码是写好了,说好的自动换壁纸呢??!代码写好了就会自己
动运行? 不急,还有最后的操作,跟我一步一步来
程序脚本 就只用填 python.exe 添加参数 填源代码的地址【例如:C:\users\lalala\desktop\ch_wallpaper.py ] 起始于 填的是你Python.exe的安装目录【例如:C:\Program Files\Python38\Python38】 最后,如果还是不能每天运行的话,可以参考我的暴保守做法,修改触发器,让它每次登录都运行一下
亲测能行,已经在使用中,由于直接把课表截下来当桌面实在是太刺眼,就稍微ps了一下,把课表挨张p在了壁纸上存了,看图