PYQT5内嵌外部exe程序(win7)

实现思路:

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

import sys
import subprocess
import time
import win32gui

from PyQt5.QtCore import QProcess
from PyQt5.QtGui import QWindow
from PyQt5.QtWidgets import QMainWindow
from PyQt5.QtWidgets import QMdiArea
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout


class 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_())

你可能感兴趣的:(QT脚本)