win定時換背景,必應源

仍是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")
相關文章
相關標籤/搜索