QT---将第三方软件窗口嵌入窗口中

这篇具有很好参考价值的文章主要介绍了QT---将第三方软件窗口嵌入窗口中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实现步骤

第一步 获取进程的句柄

通过Windows API获取窗口句柄。
代码如下:文章来源地址https://www.toymoban.com/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;  // 继续枚举下一个窗口
}
// 执行枚举
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;
				}
			}
		}	
	}
}

到了这里,关于QT---将第三方软件窗口嵌入窗口中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT充当客户端模拟浏览器等第三方客户端对https进行双向验证

    在 ssl单向证书和双向证书校验测试及搭建流程 文章中,已经做了基于https的单向认证和双向认证,,, 在进行双向认证时,采用的是curl工具或浏览器充当客户端去验证。 此次采用QT提供的接口去开发客户端向服务器发送请求,来验证https的双向认证流程。 依然以 ssl单向证书

    2024年02月14日
    浏览(53)
  • Visual Studio 打包源文件为可执行.exe程序(带有Qt Tool和第三方库)

    写在前面 : 寻找这个打包方法的起因是我用Qt写一个大作业,为了能把程序打包好,从ChatGPT和网上找了不少的内容, 花了差不多一天的时间才打包完成 , 下面的是打包过程中顺便用Obsidian记的一些 打包完成后,你可以将程序发到你同学的电脑上, 这样在他们的电脑上即可执

    2024年02月04日
    浏览(59)
  • windows下qt使用第三方库(静态链接库lib)、静态库和动态库区别、动态库的使用。

    这里主要是讲述windows下qt使用第三方库。 windows下qt使用第三方库(静态链接库lib)。 为了能够使测试更准确,首先自己用qt创建了一个已经封装好的lib库。 然后让另一个项目去链接这个lib静态库,并且去调用里面的方法。 目的: 使 untitled项目 能够使用 myllplib.lib 静态库,这

    2023年04月17日
    浏览(89)
  • 在ARM板上实现qt虚拟键盘 Qwidget实现 官方虚拟键盘、第三方虚拟键盘qtvirtualkeyboard //Qwidget最简单但效果不是最好

    在使用qt的虚拟键盘以前,我的开发板qt环境中并没有安装虚拟键盘库,所以这里还会顺便介绍如何在开发板上已安装qt环境的前提下,继续更新qt的组件。 开发板qt版本:5.15.2 在这里,我默认你已经有自己动手交叉编译过qt源码了,否则你将缺少部分细节和前置知识。首先在

    2024年04月09日
    浏览(347)
  • 民安智库(北京第三方窗口测评)电力客户满意度抽样方法

    选择适当的抽样方法是确保电力客户满意度调查能够获得具有代表性的数据的关键因素。以下是一些常用的电力客户满意度抽样方法: 1. 随机抽样: 在整个客户群体中使用随机抽样方法,确保每个客户有相等的机会被选中参与调查。这样可以避免样本偏差,获得较为客观的

    2024年02月11日
    浏览(49)
  • 华为鸿蒙开发(HarmonyOs开发):超详细的:DevEco Studio 的安装和配置 、华为第三方包依赖:SDK软件包的安装、Nodejs的导入配置

    2023年11月28日20:00:00 ⚠️⚠️HarmonyOs 开发工具 ⚠️⚠️ ⚠️⚠️DevEco Studio 的安装和配置⚠️⚠️ ⚠️⚠️⚠️❤️❤️ 关注了解更多 一、打开鸿蒙开发工具官网 下面是安装DevEco Studio 的详细步骤:希望大家给个关注,祝大家:踏上HarmonyOs 之旅,步步高升! 下载地址:官

    2024年02月03日
    浏览(61)
  • 民安智库(北京第三方窗口测评)开展汽车消费者焦点小组座谈会调查

    民安智库近日开展了一场汽车消费者焦点小组座谈会,旨在深入了解目标消费者对汽车功能的需求和消费习惯,为汽车企业提供有针对性的解决方案。 在焦点小组座谈会中,民安智库公司(第三方市容环境指数测评)邀请了一群具有代表性的汽车消费者作为参与者。他们来自

    2024年02月07日
    浏览(50)
  • 通过第三方软件修改 MacOS 的键盘映射

    由于文本编辑时大量使用word level的左移、右移,其中: OSX的单词级左右移为option + Left/Right Arrow,整行级左右移为command + Left/Right Arrow 单词级移动与进行编辑常用的command不同键位,因此尝试交换二者功能 由于 command 键在OSX下的其他重要作用,不方便直接将 option 与 command 进行

    2024年02月09日
    浏览(56)
  • mac删不掉的软件怎么办 Mac怎么删除第三方软件?

    我们在使用Mac电脑的过程中,随着使用时间变长,下载安装的软件也会增多。我们不仅会在“App Store”里下载软件,也会在其他地方下载安装第三方软件。但是,有的朋友想要卸载删除这些软件时,却不清楚如何删除这些软件。在使用Mac电脑时,有时会遇到删除某些应用程序

    2024年02月03日
    浏览(56)
  • linux第三阶段--第三方软件(一)MySQL的概述和二进制安装(官网版)

    DB2 POSTGRE-SQL RDBMS(relational database management system),既关系型数据库管理系统。 简单来说,关系型数据库,是指采用了 二维表格 来组织数据的数据库。 扩展:数据库在行业内一般会有两种情况,关系型数据库与非关系型数据库。非关系型数据库并不是通过二维表格来维护数

    2024年02月12日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包