Python实现Windows下的视频壁纸

发布时间 2023-08-20 23:06:24作者: xTechFly
import sys

import win32gui
import subprocess
import time


def pretreatmentHandle():
    hwnd = win32gui.FindWindow("Progman", "Program Manager")
    workerW1 = None
    while 1:
        workerW1 = win32gui.FindWindowEx(None, workerW1, "WorkerW", None)
        if not workerW1:
            continue
        # print('workerW1: ', workerW1)
        subWinOfWorkerW1 = win32gui.FindWindowEx(workerW1, None, "SHELLDLL_DefView", None)
        if not subWinOfWorkerW1:
            continue
        # print('subWinOfWorkerW1: ', subWinOfWorkerW1)
        workerW2 = win32gui.FindWindowEx(None, workerW1, "WorkerW", None)
        if workerW2:
            # print('workerW2: ', workerW2)
            win32gui.SendMessage(workerW2, 0x0010, 0, 0)  # WM_CLOSE
        break
    return hwnd


if __name__ == "__main__":
    video_path = "D:\\Documents\\2439226.mp4"
    parameters = ["D:\\Downloads\\ffmpeg6.0\\bin\\ffplay.exe", video_path, "-noborder", "-x", "3440", "-y", "1440",
                  "-fs", "-loop", "0"]

    time.sleep(0.2)

    startup_info = subprocess.STARTUPINFO()
    process = subprocess.Popen(parameters, startupinfo=startup_info)
    time.sleep(0.2)

    # 获取桌面管理器的窗口
    program_win_h = win32gui.FindWindow("Progman", "Program Manager")
    print("原来的program窗口句柄:", program_win_h)
    # 发送消息新增Workrw窗口,有三/四层,顶层为Workrw,并且在Program窗口的上面
    win32gui.SendMessageTimeout(program_win_h, 0x052C, 0, 0, win32gui.ILD_NORMAL, 300)

    # 将视频播放窗口设置为Program窗口的子窗口
    time.sleep(1)
    program_win_h = win32gui.FindWindow("Progman", "Program Manager")
    print("分离后的program窗口句柄:", program_win_h)

    video_h = win32gui.FindWindow("SDL_app", None)
    win32gui.SetParent(video_h, program_win_h)
    pretreatmentHandle()

    process.wait()