例子:这里是内嵌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();
至此结束。