仍是pythonw.exe運行一段時間中止,須要用原碼改進
'''
py3.7
pip install pywin32
pillow
requests
'''
import json
import logging
import os
import time
import win32api
import win32gui
import PIL.Image
import requests
import win32con
# from apscheduler.schedulers.blocking import BlockingScheduler
# from apscheduler.triggers.cron import CronTrigger
from threading import Timer
nc = int(round(time.time() * 1000))
imgdir = "C:\\ProgramData\\setpic\\"
if (not os.path.exists(imgdir)):
os.makedirs(imgdir)
logging.basicConfig(filename=imgdir+'setpic.log', filemode="w", level=logging.INFO)
def getPic():
print("getPic")
# $bingUrl='http://www.bing.com/HPImageArchive.aspx?format=js&idx='.$num.'&n=8&pid=hp&='md5(rand(time()).'string''
'''
payload = {'format': 'js', 'idx': '0', 'n': '1', 'nc': nc, 'pid': 'hp', 'video': '1'}
payload = {'format': 'js', 'idx': '0', 'n': '1', 'nc': nc, 'pid': 'hp', 'video': '1'}
r = requests.request('GET', "https://cn.bing.com/HPImageArchive.aspx", params=payload)
json_response = r.content.decode()
dict_json = json.loads(json_response)
picUrl = "https://cn.bing.com" + dict_json["images"][0]['url']
'''
picUrl = "https://bing.ioliu.cn/v1/rand?w=1920&h=1080"
p=save(picUrl)
logging.info("get pic url:" + picUrl)
setWin(p)
def save(picUrl):
w=100
h=w+w
while w<h:
r = requests.get(picUrl)
t=int(round(time.time() * 1000))
imagePath = imgdir + str(t) + ".jpg"
with open(imagePath, "wb") as f:
f.write(r.content)
logging.info("save imagePath:" + imagePath)
# return convertBmp(imagePath)
img = PIL.Image.open(imagePath)
size=img.size
w=size[0]
h=size[1]
return imagePath
def convertBmp(imagePath):
bmpImage = PIL.Image.open(imagePath)
newPath = imagePath.replace('.jpg', '.bmp')
bmpImage.save(newPath, "BMP")
return bmpImage
def setWin(newPath):
logging.info("開始設置桌面背景...")
# 打開指定註冊表路徑
reg_key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)
# 最後的參數:2拉伸,0居中,6適應,10填充,0平鋪
win32api.RegSetValueEx(reg_key, "WallpaperStyle", 0, win32con.REG_SZ, "2")
# 最後的參數:1表示平鋪,拉伸居中等都是0
win32api.RegSetValueEx(reg_key, "TileWallpaper", 0, win32con.REG_SZ, "0")
# 刷新桌面
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, newPath, win32con.SPIF_SENDWININICHANGE)
# 首次運行調用
timer_instance=None
def timer(interval,foo):
print("timer")
global timer_instance
foo()
timer_instance=Timer(interval,timer)
timer_instance.start()
inTime=False
def timer2(foo):
print("timer2")
global inTime
foo()
inTime=False
def do(timer_interval=300):
global inTime
# timer(timer_interval,getPic)
getPic()
while True:
if not inTime:
inTime=True
Timer(timer_interval,timer2,[getPic]).start()
time.sleep(int(timer_interval/100))
print('main running')
#仍是pythonw.exe運行一段時間中止
excErrRun=True
if __name__ == '__main__':
# do()
while excErrRun:
try:
# getPic()
do() #do(10)
# scheduler = BlockingScheduler()
# trigger = CronTrigger(hour=9, minute=30, timezone='Asia/Shanghai')
# scheduler.add_job(getPic, trigger)
# scheduler.start()
except:
print("Exception Logged")
logging.exception("Exception Logged")