第三方软件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);

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

至此结束。

 

2018-10-6

遇到一个问题,在win7下可以正常内嵌软件,但是在win10下不能内嵌。

解决:将Sleep(200)延时时间设大点就可以了,改为500吧,就是0.5s。

 

来源:Charles技术成长之路

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年8月24日
下一篇 2018年8月24日

相关推荐