PyQt5嵌入外部exe(如微信、cmd窗口)

背景:

PyQt在使用中需要使用一下另外一个exe程序,需要嵌入一下

过程:

Qt实战11.进程窗口集成之假装写了个第三方软件 - Qt小罗 - 博客园 (cnblogs.com)

python操作windows窗口获取正在运行的窗口句柄_python使用句柄操作-CSDN博客

翻译成PyQt来说,

1.1:我们先拿程序exe的句柄号,

1.2:然后构造一个windows程序,

1.3:最后将windows程序转为widget

实现:

主程序源码:

import sys
import timeimport win32gui
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout
from PyQt5.QtGui import QWindow, QPalette
from PyQt5.QtCore import Qtimport win32gui# 存储句柄的地方
hwnd_list = []
def get_all_hwnd(hwnd, mouse):if (win32gui.IsWindow(hwnd)and win32gui.IsWindowEnabled(hwnd)and win32gui.IsWindowVisible(hwnd)):title = win32gui.GetWindowText(hwnd)temp_dict = {}temp_dict["window_name"] = titletemp_dict["window_hwnd"] = hwndhwnd_list.append(temp_dict)win32gui.EnumWindows(get_all_hwnd, 0)class MainWindow(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):container = QWidget(self)layout = QVBoxLayout(container)self.setCentralWidget(container)self.setWindowTitle('PyQt Embed External Exe Example')external_exe_win_id = 0for hwnd_dict in hwnd_list:if '微信' in hwnd_dict["window_name"]:# 替换为外部exe窗口的句柄external_exe_win_id = hwnd_dict['window_hwnd']print('句柄号为%s'%(external_exe_win_id))window = QWindow.fromWinId(external_exe_win_id)print(window)layout.addWidget(QWidget.createWindowContainer(window))if __name__ == '__main__':app = QApplication(sys.argv)mainWindow = MainWindow()mainWindow.show()sys.exit(app.exec_())

获取当前窗口句柄源码:

import win32guihwnd_list = []import win32guidef get_all_hwnd(hwnd, mouse):if (win32gui.IsWindow(hwnd)and win32gui.IsWindowEnabled(hwnd)and win32gui.IsWindowVisible(hwnd)):title = win32gui.GetWindowText(hwnd)temp_dict = {}temp_dict["window_name"] = titletemp_dict["window_hwnd"] = hwndhwnd_list.append(temp_dict)# print(f"窗口名称:{title},句柄号:{hwnd}")win32gui.EnumWindows(get_all_hwnd, 0)for hwnd in hwnd_list:print(hwnd)
# print(hwnd_list)

微信、cmd程序嵌入效果图:

窗口缩小测试:

窗口最大化测试:

坑点:

任务管理器的句柄号看起来在所贴出程序中没什么用

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

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

相关文章

类加载的基本流程

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 类加载 1. 加载2. 验证3. 准备4. 解析5. 初…

防御保护课程笔记

内容安全 防病毒 过滤技术 密码学

ChatGPT学习第四周

📖 学习目标 ChatGPT实践操作 通过实际操作和练习,加深对ChatGPT功能的理解。 项目:创建一个ChatGPT应用案例 设计一个基于ChatGPT的小项目,将理论应用于实践。 ✍️ 学习活动 学习资料 《万字干货!ChatGPT 从零完…

【计算机网络】五种IO模型与IO多路转接之select

文章目录 一、五种IO模型二、非阻塞IO1.fcntl2.实现函数SetNoBlock3.轮询方式读取标准输入 三、I/O多路转接之select1.初识select2.select函数原型3.socket就绪条件4.select的特点5.select缺点6.select使用案例--只读取数据的server服务器1.err.hpp2.log.hpp3.sock.hpp4.select…

动态规划课堂3-----简单多状态问题(买卖股票最佳时机)

目录 引入: 例题1:按摩师(打家劫舍I) 例题2:打家劫舍II 例题3:删除并获得点数 例题4:粉刷房子 例题5:买卖股票的最佳时机含冷冻 结语: 引入: 相信看到…

使用MyBatisPlus实现向数据库中存储List类型的数据

使用MyBatisPlus实现向数据库中存储List类型的数据 问题描述 建表时,表中的这五个字段为json类型 但是在入库的时候既不能写入数据,也不能查询出数据。 解决方案: 1.首先明确,数据存入的时候是经过了数据类型转化&#xff0c…

软件测试——性能测试

目录 一、性能测试简介 二、性能测试指标 三、性能测试的流程 四、Jmeter简介 五、Jmeter常见测试框架 六、Jmeter录制脚本 七、脚本增强 八、Jmeter脚本参数化 九、断言 十、关联 十一、JDBC请求 十二、分布式测试 十三、性能测试报告 一、性能测试简介…

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

引言劝退 VSCode,全称为Visual Studio Code,是由微软开发的一款轻量级,跨平台的代码编辑器。大家能来搜用VSCode配置c/c,想必也知道VSCode的强大,可以手握一个VSCode同时编写如C,C,C#&#xff…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——02.数据格式整理(2)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

Qt 中Qwidget相关属性

文章目录 1. QWidget 核心属性1.1 enabled1.2 geometry1.2.1 window frame 的影响 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心属性 在 Qt 中, 使⽤ QWidget 类表⽰ “控件”. 像按钮, 视图, 输…

算法 -【二叉搜索树的范围和】

二叉搜索树的范围和 题目示例1示例2 分析代码 题目 给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。 示例1 输入:root [10,5,15,3,7,null,18], low 7, high 15 输出:32 示例2 输入:root …

7、Redis-事务、持久化、内存淘汰机制和过期key处理

目录 一、事务 二、持久化 三、内存淘汰机制 四、过期key处理 一、事务 Redis的事务本质上就是一个批量执行命令的操作。分为三个步骤: 开始事务:multi命令入队:正常输入命令即可执行事务(依次执行命令)&#xf…