PYQT5 외부 exe 프로그램 내장(win7)

4568 단어 QT 스크립트
아이디어 실현:
01
먼저 Spy++를 통해 창 이름을 보고 exe 프로그램을 내장할 위치를 찾습니다
02 새 하위 라인을 통해exe 프로그램을 실행한 다음 핸들을 가져옵니다. 핸들을 통해 창 전체를 가져올 수 있습니다
주: 핸들은 동적 분배입니다
03 인코딩을 준비할 때 PYQT로 Qmain Window를 작성하고 라인을 켜서 핸들을 가져오고 핸들을 통해 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_())

좋은 웹페이지 즐겨찾기