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

20 篇文章 1 订阅
10 篇文章 0 订阅

例子:这里是内嵌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。

 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Charles技术成长之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值