Qt调用外部exe并嵌入到Qt界面中(验证成功的成功)

http://t.csdnimg.cn/CDsqQ
原作者在这里

本文章主要介绍如何用Qt调用其他应用的exe,并将窗口嵌入到Qt界面中。很多人查到的代码都能成功的将exe调用起来,但是嵌入不到窗口中。主要有两种原因,现在从头到尾的梳理一下。

1.主要代码
1.1启动exe

//包含头文件
#include <QProcess>
//启动软件
QProcess *m_process = new QProcess;
m_process->start("./test.exe");/此处参数写exe路径。启动后可适当的加点延时,等待exe完全启动
//或者调用m_process->waitForFinished(1000)等待程序执行完成

1.2获取exe窗口句柄,嵌入到主界面

WId m_wid = (WId)FindWindow(L"xxx",L"xxx");//第一个参数xxx为调用的exe的类名;第二个xxx参数为调用的exe的标题名。
QWindow *M_WINDOW = QWindow::fromWinId(m_wid);
M_WINDOW->setFlags(M_WINDOW->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
QWidget *childWidget =QWidget::createWindowContainer(M_WINDOW,this);//创建新的widget
ui->horizontalLayout->addWidget(childWidget);//将widget窗口加入到主界面布局中
childWidget->show();
至此,代码部分已经完成了,但会有很多人会出现exe调用成功了,但是没有嵌入到Qt窗口中的现象。下面说一下解决此问题的办法,主要有两个原因。

启动exe程序在构造Qt主窗口界面之后,导致Qt没有找到外部exe句柄。

    解决办法: 将启动exe代码放在main函数构造主窗口类之前。具体如下:
int main(int argc, char *argv[])
{QApplication a(argc, argv);QProcess *m_process = new QProcess;m_process->start("./test.exe");MainWindow w;w.show();return a.exec();
}

3.未成功嵌入原因2
此步是嵌入成功与否的关键,也是大部分人未能成功嵌入的原因,就是获取窗口句柄时传的exe类名或者标题名称不对。尤其是类名,有的类名和我们自定义的类名或和我们理解的类名有很大出入。下面介绍一下如何准确的获取类名。

    利用spy++工具获取。具体步骤如下:1.打开VS,点击工具一栏。

在这里插入图片描述
2.点击Spy++,弹出窗口,点击查找窗口,即图中的小望远镜。
在这里插入图片描述
3.然后拖动类似光盘的图标到你想启动的外部exe窗口中,即可获取类名和标题名。 (以新建txt为例)
在这里插入图片描述
保证以上两点,在运行程序就可以成功的嵌入到自己 的Qt窗口啦!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412098.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub xxe靶机

先用御剑扫描出ip然后进入网页 进入robots.txt里面会发现俩个目录然后我们进去xxe里面 进入xxe页面进行登录&#xff0c;burp抓包 然后进入重放器 可以看到关于密码和用户名的是xml,那么就可以考虑用xxe注入 <?xml version"1.0" ?> <!DOCTYPE r [ <!…

杰发科技AC7801——Flash模拟EEP内存(2)_备份

1. 默认配置在1000个地址存储1000个数据 配置如下 计算地址 查看地址内容&#xff0c;等到打印完成 计算符合&#xff0c;从0-999共计1000 2. 修改配置在65536地址存储65536个数据 配置还是这个 因为传进去的地址是uint16_t&#xff0c;因此最大值是65536&#xff0c;写65536…

Nvidia主导AI推理竞赛,但新兴对手纷纷崭露头角

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

软考 -- 软件设计师 -- 二轮复习(1) -- 计算机系统基础知识错题集和重点知识(持续更新)

软考 – 软件设计师 – 二轮复习(1) – 计算机系统基础知识错题集和重点知识(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(1) -- 计算机系统基础知识错题集和重点知识(持续更新)前言一、CPU二、内存编址计算三、原码、反码、补码、移码计算四、浮点数 前言 考试时间&a…

给Ubuntu添加硬盘之后,该如何使用

当你给Ubuntu系统添加了新的硬盘后&#xff0c;你需要按照以下步骤来识别、分区、格式化和挂载新硬盘&#xff1a; 1. 检查新硬盘是否被系统识别 首先确认新硬盘已经被系统识别&#xff1a; lsblk 2. 分区新硬盘 如果硬盘没有分区或者需要重新分区&#xff0c;可以使用fdis…

Efficient LoFTR论文阅读(特征匹配)

Efficient LoFTR论文阅读&#xff08;特征匹配&#xff09; 摘要1. 引言2. 相关工作基于检测器的图像匹配无检测器图像匹配 3. 方法3.1. 局部特征提取3.2. 高效的局部特征变换3.3. 准备工作3.4. 聚合注意力机制3.5 粗级匹配模块有效推理策略子像素级细化模块有效的精细特征提取…

【vue、Electron】搭建一个Electron vue项目过程、将前端页面打包成exe 桌面应用

文章目录 前言使用 electron-vue 创建项目1. 安装 vue-cli&#xff08;如果未安装&#xff09;2. 使用 electron-vue 模板创建项目3. 安装和配置 electron-builder4. 运行Electron项目5. 打包应用 可能遇到的问题解决Electron vue首次启动巨慢无法加载执行npm run electron:bui…

数据结构与算法 第3天(栈和队列)

栈和队列也是线性表&#xff0c;限制插入和删除的位置只能在端点 栈&#xff08;stack&#xff09; 后进先出 LIFO 表尾进入&#xff0c;表尾删除 一、案例 案例一&#xff1a;进制转换 例子 159转换成八进制 159/819...7 19/82...3 2/80...2 结果为237 案例二&#xff1a;括…

Superset 连接elasticsearch

官方文档 https://superset.apache.org/docs/databases/elasticsearch/ 安装elasticsearch-dbapi库 pip install elasticsearch-dbapi 安装成功后 有账号密码填入&#xff1a; elasticsearchhttp://{user}:{password}{host}:9200/

SQL 注入之 sqlmap 实战

在网络安全领域&#xff0c;SQL 注入攻击一直是一个严重的威胁。为了检测和利用 SQL 注入漏洞&#xff0c;安全人员通常会使用各种工具&#xff0c;其中 sqlmap 是一款非常强大且广泛使用的开源 SQL 注入工具。本文将详细介绍 sqlmap 的实战用法。 一、sqlmap 简介 sqlmap 是一…

android 将新建的底部导航的demo,修改首页默认显示的字符串为helloworld。

1、先上个图&#xff0c;demo建好了以后&#xff0c;默认显示一个字符串&#xff1a; 2、这个demo的结构&#xff1a; activity_main.xml中用navGraph与其关联。 3、增加方法&#xff0c;给text赋值&#xff1a; package com.example.helloworld.ui.homeimport androidx.lifec…

Linux学习之路 -- systemV进程通信 -- 消息队列和信号量(简单介绍)

一、简介&#xff1a; System V进程通信&#xff08;System V IPC&#xff09;是一组在Unix和类Unix操作系统中用于进程间通信的机制。这些机制在System V Release 2中首次引入&#xff0c;并在POSIX标准中得到部分采纳。System V IPC主要包括以下几种通信方式&#xff1a; 消…

数据结构(三)——双向链表,循环链表,内核链表,栈和队列

双链表 产生原因&#xff1a;单链表只有一个指向后继的指针&#xff0c;如果要访问某节点的前驱结点&#xff0c;只能从头遍历&#xff0c;也就是访问后继节点的时间复杂度为1&#xff0c;访问前驱结点的时间复杂度为n。 而引入双链表使得在插入、删除的…

Redis_AOF持久化

AOF持久化 在AOF持久化的过程中&#xff0c;会以日志的方式记录每个redis“写”命令&#xff0c;并且redis服务器重启时重新执行AOF日志文件中的命令&#xff0c;从而达到“恢复数据”的效果 AOF故障恢复 当redis因发生故障而重启时&#xff0c;redis服务器会按照如下步骤根据…

VMware安装中标麒麟操作系统V7.0

1 说明 由于未来的工作需要&#xff0c;今天开始学习DM8数据库&#xff0c;搭建一个实验环境供学习实操使用。配置要求如下&#xff1a; 直接一步到位&#xff0c;在信创平台安装DM8数据库&#xff0c;这里选择了耳熟能详的中标麒麟操作系统&#xff0c;版本为V7.0。以前从未安…

vue手机端 搜索框调起带搜索键盘,点击确认自动关闭

效果如下图 步骤&#xff1a; 1.html,所需配置参数都在下图 <el-form :inline"true" :mode"serchFormf" class"searchForm" action"javascript:return true;"><el-form-item label"" ><el-inputsize"…

【linux002】目录操作命令篇 - ls 命令

文章目录 1、基本用法2、常见选项3、举例演示4、注意事项 ls 命令在 Linux 中用于列出目录内容。它有许多选项和参数可以用来调整显示的格式和内容。 1、基本用法 ls [选项] [文件或目录]2、常见选项 -a 或 --all&#xff1a;显示所有文件&#xff0c;包括以点.开头的隐藏文件…

java 切面日志打印出参入参

切面Controller出入参日志打印 项目结构 切面日志对controller下所有的方法生效 切面代码 Slf4j Aspect Component public class ControllerLogAspect {// 定义一个切点&#xff0c;拦截所有Controller层的public方法Before("execution(public * com.jzt.market.cont…

进程和线程(操作系统八股文part2)

一个操作系统的进程和线程部分的笔记&#xff0c;大部分来源于&#xff1a;小林coding和Javaguide&#xff0c;以及操作系统黑书。 进程和线程 什么是进程 运行中的程序叫进程**&#xff08;Process&#xff09;**。 进程是资源分配的最小单位&#xff0c;线程是执行的最小…

【QT】学习笔记:枚举桌面窗口句柄

在 Qt 中&#xff0c;虽然 Qt 本身没有直接提供枚举桌面窗口的 API&#xff0c;但可以通过调用 Windows API 来实现枚举桌面上所有窗口的句柄&#xff0c;包括子窗口以及子窗口与父窗口的关系。我们可以使用 Windows 的 EnumWindows 和 EnumChildWindows 函数来枚举所有顶层窗口…