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

QtC++截图支持窗口获取

介绍

在截图工具中你会发现,接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素,那么今天简单分析一下QTc++如何获取窗口并圈出当前鼠标下的窗口。

  • 介绍
    • 1.如何获取所有窗口
    • 2.比较函数
    • 3.实现窗口判断
  • 结尾

1.如何获取所有窗口

1.我们需要调用windows接口EnumWindowsProc回调函数来获取所有顶级窗口,需要包含windows.h,以及pro文件链接win库。

win32 {LIBS+= -luser32 -ldwmapi    # 使用WindowsAPI需要链接库
}
// 窗口信息结构体
struct WindowInfo
{HWND hwnd; // 窗口句柄int zOrder; // 窗口的Z序,值越小越在顶层RECT rect; // 窗口区域POINT pos; //窗口坐标
};std::vector<WindowInfo> windows; //窗口信息列表排序的
// 获取所有顶级窗口的回调函数
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{std::vector<WindowInfo>* windows = reinterpret_cast<std::vector<WindowInfo>*>(lParam);if (IsWindowVisible(hwnd)) // 如果窗口可见{char title[256];GetWindowTextA(hwnd, title, sizeof(title));// 过滤掉一些不需要的窗口QString str = QString::fromLocal8Bit(title);if (str.isEmpty() || str == "ZOrder" || str == "YMagnifier"){return TRUE; // 继续下一个窗口}// 获取窗口区域RECT rect;GetWindowRect(hwnd, &rect);int zOrder = GetWindowZOrder(hwnd);windows->push_back({hwnd, zOrder, rect});}return TRUE;
}

2.比较函数

1.那么我们获取窗口后,我们需要知道窗口的层级,自然要获取鼠标下最顶层的窗口句柄。

// 比较函数,用于排序窗口信息
bool CompareWindowInfo(const WindowInfo& a, const WindowInfo& b)
{return a.zOrder < b.zOrder;
}

3.实现窗口判断

1.第一步我们先调用接口
// 枚举所有顶级窗口
EnumWindows(EnumWindowsProc, reinterpret_cast<LPARAM>(&windows));// 按照Z序排序窗口信息
std::sort(windows.begin(), windows.end(), CompareWindowInfo);// 获取鼠标当前位置
POINT cursorPos;
GetCursorPos(&cursorPos);2.然后比遍历调用PtInRect判断列表的窗口位置是否匹配当前鼠标位置
匹配的话就可以拿坐标宽高来绘制了
// 寻找处于鼠标位置下的最顶层窗口
for (const auto& window : windows)
{if (PtInRect(&window.rect, cursorPos)){// 窗口左上角坐标int x = window.rect.left;int y = window.rect.top;// 窗口宽度和高度int width = window.rect.right - window.rect.left;int height = window.rect.bottom - window.rect.top;// 判断窗口是否位于主显示器上if (!IsWindowOnPrimaryMonitor(window.hwnd)) {x = (image.width() + x);}expectArea.setX(qAbs(x));expectArea.setY(qAbs(y));expectArea.setWidth(width);expectArea.setHeight(height);refreshScreenShotArea();isSelectWin = true;break;}
}

结尾

1.通过以上代码就可以实现获取鼠标当下的窗口,如想获取元素,后面会更新新的文章。

相关文章:

QtC++截图支持窗口获取

介绍 在截图工具中你会发现&#xff0c;接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素&#xff0c;那么今天简单分析一下QTc如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口…...

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示&#xff0c;也让人摸不着头脑。只能是记下来备用吧。...

springboot属性加载优先级和常见命令行属性

属性加载优先级&#xff1a; 1.SpringApplication&#xff1a;启动的main方法里注入的属性 2.PropertySource&#xff1a;通过注解 加载的数据配置文件 3.Config data file&#xff1a;application.yml/.properties 4.OS environment variable&#xff1a;环境变量 5.Command l…...

Math Reference Notes: 因式定理

文章目录 1. 因式定理的定义2. 因式定理的数学表达&#xff1a;3. 因式定理的推导4. 因式定理的含义5. 因式定理的应用6. 因式定理与余式定理的关系7. 因式定理的应用领域8.因式定理的局限性 因式定理是多项式代数中的一个重要工具&#xff0c;帮助我们通过多项式的根来因式分解…...

Kubernetes------Service

目录 一、属性说明 二、定义和基本配置 1、定义 2、创建Service 2.1、typeClusterIP 2.2、typeNodePort 2.3、固定IP访问 三、Service、EndPoint、Pod之间的关系 四、服务发现 1、基于Service中IP访问外部服务 2、基于Service中域名访问外部服务 五、Ingress的安装和使…...

C#的LINQ语句

在 C# 中&#xff0c;LINQ&#xff08;Language Integrated Query&#xff09;是一种强大的查询技术&#xff0c;它允许你使用熟悉的 C# 语法来查询数据集合。LINQ 可以用于查询各种数据源&#xff0c;包括数组、列表、数据集、SQL数据库等。 以下是一些基本的 LINQ 语句示例&…...

项目实战系列三: 家居购项目 第三部分

文章目录 &#x1f343;后台分页&#x1f345;后台分页导航 &#x1f343;首页分页&#x1f345;首页分页导航&#x1f345;首页搜索&#x1f345;两个奇怪的问题&#x1f345;会员显示登录名&#x1f345;注销登录&#x1f345;验证码 &#x1f343;后台分页 程序框架图 1.…...

【WPF】Border的使用

在 WPF 中&#xff0c;Border 控件是一个非常实用的容器控件&#xff0c;它可以用来为其他控件添加边框、背景颜色、边距等样式。Border 本身没有内置的行为&#xff0c;但是它可以包含一个子元素&#xff0c;并且可以通过各种属性来自定义外观。 Border基本属性 Child: 表示…...

机器学习(西瓜书)第 4 章 决策树

4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下&#xff0c;我们把当前结点标记为叶结点&#xff0c;并将其类别设定为该结点所含样本最多的类别&#xff1b;在第⑶种情形下&#xff0c;同样把当前结点标记为叶结点&#xff0c;但将其类别设定为其父结点所含样本最多…...

8、值、指针、引用作为参数或返回值

一、作为参数 1、值传递 #include <iostream> using namespace std;void swap(int a, int b) {cout << __FUNCTION__ << "交换前a:" << a << " b:" << b << endl;int tmp a;a b;b tmp;cout << __FUN…...

向量——通俗地解释

1. 向量 向量是一个既有大小(模)又有方向的对象&#xff0c;它可以用来描述空间中的位置、力或速度等量。我们可以从物理、数学和计算机的角度来看待向量&#xff0c;这三种观点看似不同却有关联。 &#xff08;1&#xff09;在物理专业视角下&#xff0c;向量是空间中的箭头&a…...

新书宣传:《量子安全:信息保护新纪元》

《量子安全&#xff1a;信息保护新纪元》 前言本书的看点本书的目录结语 前言 你好&#xff01; 这是我第一次发布类广告的博文&#xff0c;目的也很单纯&#xff0c;希望以作者的身份介绍一下自己出版的图书——《量子安全&#xff1a;信息保护新纪元》。此书于2024年7月出版…...

Android Framework(五)WMS-窗口显示流程——窗口布局与绘制显示

文章目录 relayoutWindow流程概览应用端处理——ViewRootImpl::setView -> relayoutWindowViewRootImpl::setViewViewRootImpl::performTraversalsViewRootImpl::relayoutWindow Surface的创建WindowManagerService::relayoutWindow了解容器类型和Buff类型的SurfaceBuff类型…...

【计网】计算机网络基础

当自律变成一种本能的习惯&#xff0c; 你就会享受到它的快乐。 --- 村上春树 --- 初识计算机网络 1 初识协议1.1 协议分层1.2 OSI七层模型1.3 TCP / IP协议 2 初识局域网2.1 什么是局域网2.2 MAC地址2.3 局域网通信 3 简单认识IP地址 1 初识协议 1.1 协议分层 首先&#…...

秃姐学AI系列之:实战Kaggle比赛:图像分类(CIFAR-10)

目录 准备工作 整理数据集 将验证集从原始的训练集中拆分出来 整理测试集 使用函数 图像增广 读取数据集 定义模型 定义训练函数 训练和验证数据集 对测试集进行分类并提交结果 准备工作 首先导入竞赛需要的包和模块 import collections import math import os i…...

nginx: [error] invalid PID number ““ in “/run/nginx.pid“

出现这个报错的原因 &#xff1a; 空值&#xff1a;“/run/nginx.pid” 文件为空或者内容不是有效的PID数字 文件损坏&#xff1a;如果PID文件被意外修改&#xff0c;例如被其他程序覆盖了内容&#xff0c;可能会显示为无效。 路径错误&#xff1a;Nginx无法找到指定的PID文件…...

Java使用Apache POI向Word文档中填充数据

Java使用Apache POI向Word文档中填充数据 向一个包含占位符的Word文档中填充数据&#xff0c;并保存为新的文档。 准备工作 环境搭建 在项目中添加Apache POI依赖。在pom.xml中添加如下依赖&#xff1a; <dependencies><dependency><groupId>org.apache.po…...

Gitflow基础知识

0.理想状态 现状 听完后的理想状态 没使用过 git 知道 git 是什么&#xff0c;会用 git 基础流程命令 用过 git&#xff0c;但只通过图形化界面操作 脱离图形化界面操作&#xff0c;通过 git 命令操作 会 git 命令 掌握 gitflow 规范&#xff0c;合理使用 rebase 和解决…...

NLP基础及其代码-tokenizer

基础知识 NLP-分词器&#xff1a;SentencePiece【参考Chinese-LLaMA-Alpaca在通用中文语料上训练的20K中文词表并与原版LLaMA模型的32K词表进行合并的代码】_sentencepiece 中文训练-CSDN博客 【OpenLLM 008】大模型基础组件之分词器-万字长文全面解读LLM中的分词算法与分词器…...

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 查找一个点集的凸包。 函数 cv::convexHull 使用斯克拉斯基算法&#xff08;Sklansky’s algorithm&#xff09;来查找一个二维点集的凸包&#…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

macOS 终端智能代理检测

&#x1f9e0; 终端智能代理检测&#xff1a;自动判断是否需要设置代理访问 GitHub 在开发中&#xff0c;使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新&#xff0c;例如&#xff1a; fatal: unable to access https://github.com/ohmyzsh/oh…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

数据挖掘是什么?数据挖掘技术有哪些?

目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...

MySQL基本操作(续)

第3章&#xff1a;MySQL基本操作&#xff08;续&#xff09; 3.3 表操作 表是关系型数据库中存储数据的基本结构&#xff0c;由行和列组成。在MySQL中&#xff0c;表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...