原理:
windows 最底層的窗體 Program Manage (如圖所示)旬盯,想要你的窗體出現(xiàn)在桌面icon后面阶淘,只需要把自己的窗體作為 Program Manage 的子窗體鼓黔,然后隱藏原先的壁紙層就可以了页畦,win10 你可以選擇在原先壁紙之上和icon之下的位置(可以省略隱藏原壁紙)糊余,但這種是兼容win7和win10的做法霍殴。
百度只有C++的做法棚赔,翻譯了一下
這個(gè)東西及其消耗資源5鄞亍!靠益!
# @File : 動(dòng)態(tài)壁紙.py
# @Date : 2020-01-17
# @Author : 萌新小強(qiáng)
import os
import sys
from win32api import *
from win32con import *
from win32gui import *
from PySide2.QtGui import *
from PySide2.QtCore import *
from PySide2.QtWidgets import *
from PySide2.QtMultimediaWidgets import *
from PySide2.QtMultimedia import *
global _wor_
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.setWindowTitle('動(dòng)態(tài)壁紙測(cè)試')
self.setWindowFlags(Qt.FramelessWindowHint)
self.resize(1920, 1080)
playOutWidget = QVideoWidget(self)
playOutWidget.resize(self.size())
playOutWidget.show()
playlist = QMediaPlaylist(self)
playlist.addMedia(QMediaContent(QUrl(r'wwwww.mp4')))
playlist.setCurrentIndex(0)
playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
player = QMediaPlayer(self)
player.setVideoOutput(playOutWidget) # 視頻播放輸出的widget丧肴,就是上面定義的
player.setPlaylist(playlist) # 選取視頻文件
player.play()
def EnumWindowsProc(tophandle, topparamhandle):
global _wor_
defview = FindWindowEx(tophandle, 0, 'SHELLDLL_DefView', None)
if defview > 0:
_wor_ = FindWindowEx(0, tophandle, "WorkerW", None)
return True
if __name__ == '__main__':
app = QApplication.instance()
if not app:
app = QApplication(sys.argv)
windowHandle = FindWindow('Progman', None)
SendMessageTimeout(windowHandle, 0x052c, 0, 0, SMTO_NORMAL, 0x3e8)
EnumWindows(EnumWindowsProc, windowHandle)
ShowWindow(_wor_, SW_HIDE)
ui = MainWindow()
ui.show()
SetParent(ui.winId(), windowHandle)
app.exec_()
image.png
image.png
image.png