第三方软件exe内嵌到qt界面里面

例子:这里是内嵌Windows自带的计算器。另外有些软件是内嵌不了的,例如我希望内嵌的资源管理器软件就内嵌不了,听老师傅说是不是标准窗口的原因。

(一)函数:

void embeddedSoftware(const QString &path)
{
    //1、启动进程
    QProcess *pProcess = new QProcess(this);
    pProcess->start(path, QStringList() << "");

    //2、延时,这个很重要,一定要大于50
    Sleep(200);

    //3、搜索匹配参数的窗口
    HWND childHwnd = FindWindow(L"CalcFrame", NULL);

    //4、设置父窗口
    HWND parentHwnd = (HWND)ui.mWidget->winId();
    SetParent(childHwnd, parentHwnd);

    //5、设置窗口位置
    SetWindowPos(childHwnd, HWND_TOP, 0, 0, 500, 500, SWP_FRAMECHANGED);
}

(二)调用方法

    const QString path = "C:\\Windows\\System32\\calc.exe";
    embeddedSoftware(path);
(三)题外话

在我这里是可以正常内嵌计算器的了,网上找了很多资料,之前一直不成功,会出现计算器会独立运行没有正常内嵌,找了很久原来是那个延时的原因。还有一个是使用了下面QWindow::fromWinId和 QWidget::createWindowContainer的,但是内嵌的界面不完整。

    QWindow *m_window = NULL;
    m_window = QWindow::fromWinId((WId)childHwnd);

扫描二维码关注公众号,回复: 3437393 查看本文章

    QWidget *m_widget = NULL;
    m_widget = QWidget::createWindowContainer(m_window, ui.mWidget);
    m_widget->setGeometry(10,10,1500,800);
    m_widget->show();

至此结束。

猜你喜欢

转载自blog.csdn.net/caokunchao/article/details/82876877