当前位置: 首页 > news >正文

如何获取谷歌浏览器窗口句柄并将其设置为Qt的父窗口

1、首先,确保你在项目的 .pro 文件中加入对WinAPI的支持:

win32: LIBS += -luser32

2、步骤概述:

  1. 使用WinAPI获取谷歌浏览器窗口的句柄。
  2. 获取Qt窗口的句柄。
  3. 使用SetParent函数,将Qt窗口设置为谷歌浏览器窗口的子窗口。
  4. 调整Qt窗口的位置和大小以适应谷歌浏览器窗口。

3、代码实现

#include <QApplication>
#include <QMainWindow>
#include <QDebug>
#include <windows.h>
#include <string>// 回调函数,枚举所有窗口,找到谷歌浏览器窗口句柄
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{char className[256];GetClassNameA(hwnd, className, sizeof(className));// 检查窗口类名是否是谷歌浏览器if (std::string(className) == "Chrome_WidgetWin_1"){qDebug() << "Found Google Chrome window, HWND:" << hwnd;*(HWND*)lParam = hwnd;return FALSE; // 找到后停止枚举}return TRUE; // 继续枚举
}// 查找谷歌浏览器窗口的句柄
HWND findChromeWindow()
{HWND chromeHwnd = nullptr;EnumWindows(EnumWindowsProc, (LPARAM)&chromeHwnd);return chromeHwnd;
}int main(int argc, char *argv[])
{QApplication app(argc, argv);// 创建一个Qt主窗口QMainWindow mainWindow;mainWindow.setWindowTitle("Qt Child Window in Chrome");mainWindow.resize(800, 600);mainWindow.show();// 获取谷歌浏览器的窗口句柄HWND chromeHwnd = findChromeWindow();if (chromeHwnd != nullptr){// 获取Qt窗口的句柄HWND qtHwnd = (HWND)mainWindow.winId();// 将Qt窗口设置为谷歌浏览器窗口的子窗口(即Chrome为父窗口)SetParent(qtHwnd, chromeHwnd);// 调整Qt窗口的位置和大小,使其适应谷歌浏览器窗口SetWindowPos(qtHwnd, nullptr, 0, 0, 800, 600, SWP_NOZORDER | SWP_SHOWWINDOW);qDebug() << "Successfully set Qt window as child of Google Chrome window.";}else{qDebug() << "Google Chrome window not found.";}return app.exec();
}

4、解释:

  1. 查找谷歌浏览器窗口:我们通过 EnumWindows 函数查找类名为 "Chrome_WidgetWin_1" 的窗口,该类名一般对应于谷歌浏览器主窗口。

  2. 获取Qt窗口句柄mainWindow.winId() 返回的是 Qt 窗口的句柄,我们将其作为目标子窗口。

  3. 将Qt窗口设置为谷歌浏览器窗口的子窗口SetParent(qtHwnd, chromeHwnd) 将 Qt 窗口的父窗口设置为谷歌浏览器的窗口。

  4. 调整Qt窗口的大小和位置SetWindowPos 用来调整 Qt 窗口的位置和大小,使其嵌入到谷歌浏览器窗口内,符合你希望的布局。

5、注意事项:

  • 这种方法使得 Qt 窗口成为谷歌浏览器窗口的一部分,受浏览器的窗口管理控制。此时 Qt 窗口就相当于是浏览器中的一个组件或子窗口。
  • 这种操作可能会导致Qt窗口的某些行为受限,特别是在父窗口(谷歌浏览器)发生窗口调整、最小化等事件时,Qt窗口的表现会随之变化。
  • 如果多个浏览器窗口存在,你需要通过特定属性(例如窗口标题、窗口位置、进程ID等)来区分选择正确的谷歌浏览器窗口。

相关文章:

如何获取谷歌浏览器窗口句柄并将其设置为Qt的父窗口

1、首先&#xff0c;确保你在项目的 .pro 文件中加入对WinAPI的支持&#xff1a; win32: LIBS -luser322、步骤概述&#xff1a; 使用WinAPI获取谷歌浏览器窗口的句柄。获取Qt窗口的句柄。使用SetParent函数&#xff0c;将Qt窗口设置为谷歌浏览器窗口的子窗口。调整Qt窗口的…...

牛客小白月赛102:最短?路径(分层bfs)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给定一个 nnn 个点 mmm 条边的无向图&#xff0c;LH 打算从点 111 出发去点 nnn。 假如 LH 到达了一个点 iii&#xff0c;那么他可以选择在这个点花费 aia_iai​ 的时间休息后继续赶…...

JSON字符串转成java的Map对象

要将这个JSON字符串转换成Java对象&#xff0c;你可以定义一个Element类来表示每个要素&#xff0c;然后使用一个Map来存储这些要素。以下是具体的实现步骤&#xff1a; 步骤 1: 定义 Element 类 首先&#xff0c;定义一个Element类来表示每个要素的结构&#xff1a; public…...

重读《人月神话》(8)-为什么巴比伦塔会失败?(Why Did the Tower of Babel Fail?)

据《创世纪》记载&#xff0c;巴比伦塔是人类继诺亚方舟之后的第二大工程壮举&#xff0c;但巴比伦塔同时也是第一个彻底失败的工程。 巴比伦塔的管理教训 这个项目具备了几乎所有成功的先决条件&#xff1a; 有清晰的目标&#xff0c;尽管目标理想化到了近乎不可实现的地步&…...

STL源码剖析:Hashtable

hashtable 概述 哈希表是一种数据结构&#xff0c;它提供了快速的数据插入、删除和查找功能。它通过使用哈希函数将键&#xff08;key&#xff09;映射到表中的一个位置来实现这一点&#xff0c;这个位置称为哈希值或索引。哈希表使得这些操作的平均时间复杂度为常数时间&…...

spring-boot学习(2)

上次学习截止到拦截器 1.构建RESfun服务 PathVariable通过url路径获取url传递过来的信息 2.MyBatisPlus 第三行的mydb要改为自己的数据库名 第四&#xff0c;五行的账号密码改成自己的 MaooerScan告诉项目自己的这个MyBatisPlus是使用在哪里的&#xff0c;包名 实体类的定义…...

《案例》—— OpenCV 实现2B铅笔填涂的答题卡答案识别

文章目录 一、案例介绍二、代码解析 一、案例介绍 下面是一张使用2B铅笔填涂选项后的答题卡 使用OpenCV 中的各种方法进行真确答案识别&#xff0c;最终将正确填涂的答案用绿色圈出&#xff0c;错误的答案不圈出&#xff0c;用红色圈出错误题目的正确答案最终统计正确的题目数…...

新员工入职流程指南_完整入职流程解析

文章介绍了新员工入职流程的重要性、步骤及持续时间&#xff0c;并推荐ZohoPeople软件自动化管理入职流程&#xff0c;提升新员工入职体验&#xff0c;减少离职率&#xff0c;确保合规性&#xff0c;提升公司品牌形象。 一、新员工入职流程是怎样的&#xff1f; 入职流程是指一…...

mysql查看和修改默认配置

1.查看最大连接数 SELECT max_connections; 或者 SHOW VARIABLES LIKE max_connections;2.查看当前连接的客户端 SHOW PROCESSLIST;2.临时设置最大连接数 SET GLOBAL max_connections 500;3.临时设置连接客户端交互超时时间 SET GLOBAL interactive_timeout 1800;4.永久生…...

海外云手机:出海电商养号智能化方案

随着出海电商的迅猛发展&#xff0c;使用海外云手机进行养号已经成为越来越多商家的新选择。尤其在社交电商推广和短视频引流方面&#xff0c;海外云手机不仅提高了流量的精准度&#xff0c;还助力商家实现业务的快速增长。本文将探讨海外云手机养号相较于传统模式的优势&#…...

OpenAI Canvas用户反馈:并不如外界传言般“炸裂”,更不是“AGI的终极交互形态” | LeetTalk Daily...

“LeetTalk Daily”&#xff0c;每日科技前沿&#xff0c;由LeetTools AI精心筛选&#xff0c;为您带来最新鲜、最具洞察力的科技新闻。 Canvas作为一个独立的界面&#xff0c;通过与ChatGPT的结合来提升用户的协作能力和创作效率。尽管用户对其独立性与现有工具的整合存在不同…...

RiproV9.0主题wordpress主题免扩展可二开PJ版/WordPress博客主题Ripro全解密无后门版本

&#x1f525;&#x1f389; 全新RiPro9.0开源版发布 —— 探索无限可能&#x1f680;&#x1f310; 今天&#xff0c;我很高兴能与大家分享一个重磅资源——RiPro9.0开源版&#xff01;这不是一个普通的版本&#xff0c;而是一个经过精心打磨、全面解密的力作。&#x1f50d;…...

[LeetCode] 515. 在每个树行中找最大值

题目描述&#xff1a; 给定一棵二叉树的根节点 root &#xff0c;请找出该二叉树中每一层的最大值。 示例1&#xff1a; 输入: root [1,3,2,5,3,null,9] 输出: [1,3,9]示例2&#xff1a; 输入: root [1,2,3] 输出: [1,3]提示&#xff1a; 二叉树的节点个数的范围是 [0,10…...

【分布式微服务云原生】《微服务架构大揭秘:流行框架与服务治理攻略》

标题&#xff1a;《微服务架构大揭秘&#xff1a;流行框架与服务治理攻略》 摘要&#xff1a;本文深入探讨了流行的微服务架构框架&#xff0c;包括 Spring Cloud、Docker Kubernetes、Dubbo、Service Mesh 和 Serverless 架构&#xff0c;详细介绍了它们的关键组件和服务治理…...

uniapp uni.uploadFile errMsg: “uploadFile:fail

uniapp 上传后一直显示加载中 1.检查前后端上传有无问题 2.检查失败信息 await uni.uploadFile({url,filePath,name,formData,header,timeout: 30000000, // 自定义上传超时时间fail: async function(err) {$util.hideAll()// 失败// err 返回 {errMsg: "uploadFile:fai…...

一个常见问题:TCP和UDP是否可以使用一个端口

TCP&#xff08;传输控制协议&#xff09;和UDP&#xff08;用户数据报协议&#xff09;做为两种被广泛使用的协议&#xff0c;它们在处理数据时采用不同的机制&#xff0c;那么有一个问题&#xff0c;在同一系统内&#xff0c;TCP和UDP的服务是否可以使用同一个端口呢&#xf…...

前端报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序(node_modules下载不下来)

原因&#xff1a;Vue CLI 没有被正确安装&#xff0c;或者其安装路径没有被添加到你的系统环境变量中。 一、确认 Vue CLI 是否已安装&#xff1a; 打开命令行工具&#xff08;例如 CMD、PowerShell、Terminal&#xff09;&#xff0c;输入以下命令来检查 Vue CLI 是否已安装…...

白日门【鬼服无限刀】win服务端+安卓客户端+教程+GM后台

演示系统&#xff1a;Windows Server 2012 -------------------------------------------------------------------------------------------------------------------------- 把服务端上传解压缩到服务器D盘根目录:D:\【解压完成后检查路径是否正确:D:\】 安装基础运行环境&…...

如何迅速的了解一个人

目录 ​社会经济背景 生活满意度 爱心和同情心 如果你想迅速地了解一个人&#xff0c;问他问题是最快捷的方法。不论你是相亲、工作、而试、看医生还是为孩子找个学校&#xff0c;事先设计好你想提出的问题&#xff0c;想好你究竟要搜罗对方哪一方面的信息这样做会实现许多目…...

Window和Linux远程调度kettle

在windows和linux分别安装kettle&#xff0c;我的是pdi-ce-8.2.0.0-342版本&#xff0c;在windows中配置好之后&#xff0c;直接放到虚拟机的目录下 在cmd窗口中到kettle根目录下执行 &#xff08;carte ip 端口 &#xff09;&#xff0c;出现如下提示即启动成功 在远程端…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...