import win32gui
import win32con
from PyQt5.QtWidgets import QWidget, QApplication, QSystemTrayIcon, QMenu, QAction
from PyQt5.QtGui import QIcon
import sys
g_workerw = 0 # 代表桌面底层的窗口句柄
def EnumWndCallback(tophandle, topparamhandle):
p = win32gui.FindWindowEx(tophandle, 0, "SHELLDLL_DefView", None)
if p != 0:
global g_workerw
g_workerw = win32gui.FindWindowEx(0, tophandle, "WorkerW", None)
def lockWindow():
global lockMode
if lockMode == True:
lockMode = False
lockAction.setText("锁定窗口")
win32gui.SetParent(widget.winId(), None)
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER)
else:
lockMode = True
lockAction.setText("解锁窗口")
win32gui.SetParent(widget.winId(), g_workerw)
lockMode = False
app = QApplication(sys.argv)
widget = QWidget()
widget.show()
# 设置托盘图标
myTrayIcon = QSystemTrayIcon(widget)
myTrayIcon.setIcon(QIcon("icon.ico"))
myTrayIcon.setToolTip("PyQt5窗口嵌入桌面示例")
myTrayIcon.show()
myMenu = QMenu()
lockAction = QAction("锁定窗口", myTrayIcon)
quitAction = QAction("退出", myTrayIcon)
myMenu.addAction(lockAction)
myMenu.addAction(quitAction)
myTrayIcon.setContextMenu(myMenu)
quitAction.triggered.connect(app.quit)
lockAction.triggered.connect(lockWindow)
# 枚举窗口获得g_workerw
win32gui.EnumWindows(EnumWndCallback, 0)
sys.exit(app.exec_())