原理:
windows 最底层的窗体 Program Manage (如图所示),想要你的窗体出现在桌面icon后面,只需要把自己的窗体作为 Program Manage 的子窗体,然后隐藏原先的壁纸层就可以了,win10 你可以选择在原先壁纸之上和icon之下的位置(可以省略隐藏原壁纸),但这种是兼容win7和win10的做法。
百度只有C++的做法,翻译了一下
这个东西及其消耗资源!!!
# @File : 动态壁纸.py
# @Date : 2020-01-17
# @Author : 萌新小强
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('动态壁纸测试')
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_()