實現步驟
第一步 獲取進程的句柄
通過Windows API獲取窗口句柄。
代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-531128.html
// 定義枚舉回調函數
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
if (!IsWindowVisible(hwnd))
{
return TRUE;
}
std::vector<wstring>& titles = *reinterpret_cast<std::vector<wstring>*>(lParam);
wchar_t titleBuf[512];
if (GetWindowText(hwnd, titleBuf, _countof(titleBuf)) > 0)
{
auto pTitles = reinterpret_cast<vector<wstring>*>(lParam);
pTitles->push_back(titleBuf);
}
return TRUE; // 繼續(xù)枚舉下一個窗口
}
// 執(zhí)行枚舉
vector<wstring> windowTitles;
::EnumWindows(EnumWindowsProc, reinterpret_cast<LPARAM>(&windowTitles));
第二步 使用QProcess打開第三方exe
QProcess*p = = new QProcess();
{
p->start(path);
// 獲取外部進程的PID
qint64 externalProcessId = p->processId();
Sleep(5000);//等待進行加載完成
vector<wstring> windowTitles;
::EnumWindows(EnumWindowsProc, reinterpret_cast<LPARAM>(&windowTitles));
for(wstring title : windowTitles)
{
HWND hwnd = ::FindWindow(nullptr,(LPCWSTR)title.c_str());
if (hwnd != nullptr)
{
DWORD processId;
::GetWindowThreadProcessId(hwnd, &processId);
if (processId == externalProcessId)
{
WId wid = (WId)hwnd;
m_pQWindow = QWindow::fromWinId(wid);
QWidget *pWindow = QWidget::createWindowContainer(m_pQWindow);
pWindow->setWindowModality(Qt::NonModal);
pWindow->setAttribute(Qt::WA_ShowModal, false);
pWindow->setWindowFlags(Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint);
pWindow->setFixedWidth(1200);
pWindow->setFixedHeight(800);
pWindow->show();
return;
}
}
}
}
}
文章來源:http://www.zghlxwxcb.cn/news/detail-531128.html
到了這里,關于QT---將第三方軟件窗口嵌入窗口中的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!