Qt嵌入外部进程

一、前言

Qt可以嵌入任意外部.exe程序


二、具体步骤

1、启动你想嵌入的exe程序
在这里插入图片描述
在这里插入图片描述


2、查看exe的窗口标题以及类名

打开Visual Studio,【工具】–>【Spy++】

在这里插入图片描述
在这里插入图片描述
键盘【Ctrl + F】,会出现如下窗口:

在这里插入图片描述
鼠标点住红色方框内图标,将鼠标移动到我们打开exe窗口上:

在这里插入图片描述
【标题】和【类名】是我们后面需要用到的


3、工程文件(*.pro)添加如下代码

LIBS += -luser32

在这里插入图片描述


4、完整代码

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDebug>
#include <QProcess>
#include <Windows.h>
#include <QWindow>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    QProcess * m_process{nullptr};
    QWindow * m_window{nullptr};
    QWidget * m_widget{nullptr};
    PROCESS_INFORMATION pi;

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->resize(1920,1080);

    QString cmd = "C:/4/OPenGL.exe";
    STARTUPINFO si = { sizeof(si) };
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = true;
    bool bRet = CreateProcess(
                NULL,
                (LPWSTR)cmd.toStdWString().c_str(),
                NULL,
                NULL,
                FALSE,
                CREATE_NEW_CONSOLE,
                NULL,
                NULL, &si, &pi);

    Sleep(1000);
    WId wid = (WId)FindWindow(L"Qt5QWindowOwnDCIcon", L"The first OpenGL Window");//获取窗口句柄,类名,标题
    m_window = QWindow::fromWinId(wid);
    if(m_window) {
        m_widget = QWidget::createWindowContainer(m_window, this, Qt::Widget);
        if(m_widget) {
            ui->tabWidget->addTab(m_widget,"OPenGL");
        }else {
            qDebug()<<"m_widget失败";
        }
    }else {
        qDebug()<<"m_window失败";
    }

}

MainWindow::~MainWindow()
{
    DWORD exitCode; //退出码
    TerminateProcess(pi.hProcess, exitCode);    //退出进程

    delete ui;
}


5、运行展示

在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值