import win32gui
from PySide2.QtWidgets import QWidget, QApplication, QSystemTrayIcon, QMenu, QAction
from PySide2.QtGui import QIcon
from PySide2.QtCore import SIGNAL, SLOT, Slot
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)
@Slot()
def lockWindow():
global lockMode
if lockMode == True:
lockMode = False
lockAction.setText("锁定窗口")
win32gui.SetParent(widget.winId(), None)
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("PySide2窗口嵌入桌面示例")
myTrayIcon.show()
myMenu = QMenu()
lockAction = QAction("锁定窗口", myTrayIcon)
quitAction = QAction("退出", myTrayIcon)
myMenu.addAction(lockAction)
myMenu.addAction(quitAction)
myTrayIcon.setContextMenu(myMenu)
myTrayIcon.connect(quitAction, SIGNAL("triggered()"), app, SLOT("quit()"))
lockAction.triggered.connect(lockWindow)
# 枚举窗口获得g_workerw
win32gui.EnumWindows(EnumWndCallback, 0)
sys.exit(app.exec_())
- 1
- 2
- 3
前往页