PYQT5内嵌外部exe程序(win7)

来源:互联网 发布:java就业培训教程豆瓣 编辑:程序博客网 时间:2024/05/17 21:47

实现思路:

01 首先通过Spy++查看窗口名称,找到需要内嵌exe程序的位置
02   通过新建子线程来运行exe程序,然后获取它的句柄,这样可以通过句柄来获取它的整个窗体
注:句柄是动态分配的
03   准备编码,先用PYQT写一个QMainWindow,开启线程获取句柄,通过句柄建立QWindow,再将它添加到QWidget中

import sysimport subprocessimport timeimport win32guifrom PyQt5.QtCore import QProcessfrom PyQt5.QtGui import QWindowfrom PyQt5.QtWidgets import QMainWindowfrom PyQt5.QtWidgets import QMdiAreafrom PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayoutclass Example(QMainWindow):    def __init__(self):        super().__init__()        self.p = QProcess()        self.layout = QVBoxLayout()        self.mdi = QMdiArea()        self.widget = QWidget()        self.initUI()    def initUI(self):        import threading        t = threading.Thread(target=self.runExe)        t.start()        hwnd1 = win32gui.FindWindowEx(0, 0, "CalcFrame", "计算器")        start = time.time()        while hwnd1 == 0:            time.sleep(0.01)            hwnd1 = win32gui.FindWindowEx(0, 0, "CalcFrame", "计算器")            end = time.time()            if end - start > 5:                return        window = QWindow.fromWinId(hwnd1)        self.createWindowContainer(window, self)        self.setGeometry(500, 500, 450, 400)        self.show()    @staticmethod    def runExe():        exePath = "C:\\Windows\\system32\\calc.exe"        subprocess.Popen(exePath)if __name__ == '__main__':    app = QApplication(sys.argv)    ex = Example()    sys.exit(app.exec_())
原创粉丝点击