例子:这里是内嵌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。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!