使用SPY++查看窗口信息去排查客户端UI软件问题

目录

1、使用SPY++查看窗口的信息

2、使用SPY++查看某些软件UI窗口用什么UI组件实现的

2.1、查看海康视频监控客户端安装包程序

2.3、查看字节协同办公软件飞书

2.4、查看最新版本的Chrome浏览器

2.5、查看小鱼易连视频会议客户端软件

2.6、常用的UI界面库

3、查看窗口最小化时的窗口位置

4、查看主流软件的窗口风格,猜测其UI界面是如何实现的

5、将所有窗口的信息导出到文件中

6、最后


VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/124272585C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/125529931C++软件分析工具从入门到精通案例集锦(专栏文章正在更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/131405795C/C++基础与进阶(专栏文章,持续更新中...)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/category_11931267.html       SPY++是微软Visual Studio自带的一个用来查看窗口属性、窗口消息、进程与线程的工具,在日常工作中处理UI窗口事务用的比较多,今天就来给大家讲一下这个工具的用途。使用该工具去查看窗口属性,可以去辅助分析C++客户端UI程序的问题。

1、使用SPY++查看窗口的信息

       SPY++工具打开后,会显示当前系统中所有打开的窗口信息,如下所示:

如果系统有窗口发生改变,比如新增或销毁窗口,则需要点击工具栏中的刷新按钮手动刷新一下。

       可以点击工具栏中的望远镜按钮:

 在打开的窗口搜索窗口中可以按窗口句柄、窗口标题或者窗口类名去搜索目标窗口,以企业微信窗口标题为例,如下所示:

这样就搜索到了企业微信的主窗口,右键点击,就可以查看企业微信主窗口的信息,比如窗口坐标:

点击样式标签页,可以查看到窗口的基本样式和扩展样式,如下:

 如果窗口风格中有WS_CHILD,表示该窗口是子窗口;窗口是否处于显示状态(非掩藏状态),看窗口是否WS_VISIBLE风格。关于窗口风格的详细说明,可以查看我之前写的文章:
VC++ Win32界面编程中的窗口风格要点总结(附源码)icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/121572701此外还可以点击类标签页,查看窗口类名;点击进程标签页,查看窗口所属进程和线程信息。

2、使用SPY++查看某些软件UI窗口用什么UI组件实现的

       点击工具栏中的查看窗口按钮,弹出如下窗口:

左键点击图中按钮,一直按着不放,然后将光标移动到目标程序窗口上,这样就能查看到窗口的类名,通过类名我们大概就能猜出对应如软件的UI界面是使用何种UI组件实现的。

2.1、查看海康视频监控客户端安装包程序

       使用上面的方法探测海康视频监控客户端安装包程序的主窗口,探测到的窗口类如下所示:

看到安装包主窗口用的是对话框。也可以探测安装包窗口中的编辑框和按钮的窗口类,分别是Edit和Button,所以估计该安装包是用MFC实现的。

       使用上面的方法探测WeLink的登陆窗口,探测到的窗口类如下所示:

可以看到类名为Chrome_WidgetWin_1,包含Chrome字样,所以估计WeLink UI界面是用Chrom浏览器UI组件实现的。也可以探测登陆后的主窗口,主窗口的类名也是Chrome_WidgetWin_1。

2.3、查看字节协同办公软件飞书

       使用上面的方法探测到飞书的窗口中均包含Chrome字样,如下所示:

从上图可以看出窗口类类名为Chrome_RenderWidgetHostHWND,说明飞书软件的UI界面也是用Chrome浏览器UI组件实现的。

2.4、查看最新版本的Chrome浏览器

       使用上面的方法探测Chrome浏览器窗口,如下所示:

窗口类名为Intermediate D3D Window,好像并不包含Chrome字样,是不是和上面讲的不一致?最新版本的Chrome浏览器不再使用自己开源的UI界面组件了?其实这个和GPU加速有关,如果将GPU加速关闭掉,窗口的类名中就会包含Chrome字样了。如果想搞清楚具体原因,可以去查看开源项目Chromium源码,去一探究竟!

2.5、查看小鱼易连视频会议客户端软件

       使用上面的方法探测小鱼易连视频会议客户端软件的主窗口,如下所示:

窗口类名为Qt5152QWindowIcon,所以该软件的UI界面使用QT库实现的。

2.6、常用的UI界面库

        这个地方顺便说一下Windows平台上C++软件常用的UI界面库,主要有MFC、duilib、QT和开源的Chrome UI组件库。

        其中,MFC库是微软的一套很古老的界面库,实现酷炫的界面比较麻烦,大型商业软件基本都不用了,但有个行业除外,很多炒股软件客户端还是使用。

        duilib库是开源的,很多软件都在使用,比如百度云管家、爱奇艺PPS视频客户端、华为手机助手PC客户端等。

        QT库最近几年比较好,国产化进程被提到了一个很高的高度,基本所有国产化系统上的软件客户端都使用QT,有些软件为了实现跨平台,Windows和Linux平台均使用QT跨平台库,比如很多安防厂商的视频监控客户端软件都使用QT库,比如海康威视和浙江大华的客户端软件。

        Chrome浏览器的UI界面组件,最近几年也比较火,很多厂商的客户端软件都在使用,比如华为的WeLink、字节飞书、阿里钉钉、有道字典、有道云笔记等。

3、查看窗口最小化时的窗口位置

       以企业微信主窗口为例,点击工具栏中的按钮,然后将探测按钮拖到企业微信的主窗口上,然后探测到:

点击确定按钮,就会弹出窗口的属性窗口,在常规标签页中可以看到企业微信主窗口处于正常显示状态时窗口坐标,如下所示:

然后将企业微信主窗口最小化,然后在上述页面中点击刷新按钮,刷新一下窗口的信息,看到窗口坐标变成如下的值:

窗口的宽高不变,但窗口left、top、right、bottom坐标值变成了很大的负值,所以将窗口最小化时系统将窗口移动到一个远离桌面可见区域的一个地方了,窗口还处于显示状态,是和掩藏状态有区别的。

4、查看主流软件的窗口风格,猜测其UI界面是如何实现的

       现在主流的视频会议软件都支持发送共享图像,比如桌面共享,其中两个厂商不仅支持桌面共享,还支持在桌面上框出某个区域进行共享。我们在某个定制项目中客户要求也要支持区域共享,应该是这两个厂商参与项目竞标,向客户宣导了这个功能,所以客户也想实现这个功能。

       于是我们就研究了支持该功能的友商的软件,看看是什么样的交互,模仿着他们的效果实现一下。区域共享的效果如下:

框选共享区域的选择是客户拖动的,拖标题栏可以移动整个选择框窗口;拖动窗口边界区域,可以调整选择框的大小。此外,选择框中间区域是透明的,边框比较简单,这个透明区域是怎么实现的呢?猜测可能是用Layered分层窗口实现的。于是使用SPY++查看区域选择框窗口的属性,查看窗口风格,果然设置了WM_EX_LAYERED属性,如下所示:

选择区域窗口,边界不透明,中间区域透明,应该是调用系统API函数UpdateLayeredWindow实现的。具体的细节,之前已经写成了一篇详细的文章,想了解的,可以去查看这篇文章:
使用Layered分层窗口实现会议中的桌面区域共享功能icon-default.png?t=N7T8https://blog.csdn.net/chenlycly/article/details/120756341

5、将所有窗口的信息导出到文件中

       可以将某个时刻系统中打开的所有窗口信息保存到文件中,如果要保存最新的,需要点击工具栏中的刷新按钮,将窗口信息刷成最新的,然后再保存。点击菜单栏中的目录树->将目录树保存到文件中,即可导出到一个后缀名为.sxt文件中,该文件可以直接用记事本或者Notepad++查看,比如:

这个导出到文件中的功能在排查软件因为窗口问题导致崩溃的问题时可能有用,比如崩溃在某个窗口代码中,但调用堆栈都是系统框架的代码,我们只能看到句柄值,我们搞不清楚到底是哪个窗口,如果我们事先将窗口信息保存到文件中,我们使用窗口句柄到文件中搜索就能看到窗口的类名等信息,这样可能就能确定发生崩溃的窗口是哪个了,我们在实际的项目中就使用过保存到文件的功能。

6、最后

       除了上述功能之外,还可以捕捉窗口的窗口消息,有时在分析窗口消息问题会有一定的用处。SPY++是比较简单的工具,本文根据日常使用经验给大家做个总结,以供借鉴和参考! 

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

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

相关文章

CIP或者EtherNET/IP中的PATH是什么含义?

目录 SegmentPATH举例 最近在学习EtherNET/IP,PATH不太明白,翻了翻规范,在这里记个笔记。下面的叙述可能是中英混合,有一些是规范中的原文我直接搬过来的。我翻译的不准确。 Segment PATH是CIP Segment中的一个分类。要了解PATH…

Dev C++安装与运行

参考: https://blog.csdn.net/Keven_11/article/details/126388791 https://www.cnblogs.com/-Wallace-/p/cpp-stl.html 2021年真题要求 2022年真题要求 河南省的考试环境 IDE环境 Dev C 安装 下载 安装 点击OK,选择我接受 修改安装路径为D盘d:\Program Fi…

MQTT协议是什么?快速了解MQTT协议在物联网中的应用

随着工业互联网的迅猛发展,工业设备数据采集和实时监控成为制造业提高生产效率和质量的重要手段。在物联网应用中,通信技术包括Wi-Fi、RFID、NFC、RS232、RS485、USB等,其中在物联网技术框架体系中所使用到的通讯协议主要有:AMQP、…

Django(21):使用Celery任务框架

目录 Celery介绍Celery安装Celery使用项目文件和配置启动Celery编写任务调用异步任务查看任务执行状态及结果 设置定时和周期性任务配置文件添加任务Django Admin添加周期性任务启动任务调度器beat Flower监控任务执行状态Celery高级用法与注意事项给任务设置最大重试次数不同任…

26663-2011 大型液压安全联轴器 课堂随笔

声明 本文是学习GB-T 26663-2011 大型液压安全联轴器. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了大型液压安全联轴器的分类、技术要求、试验方法及检验规则等。 本标准适用于联接两同轴线的传动轴系,可起到限制…

软考高级之系统架构师之软件需求工程

概述 一个完整的软件生存周期是以需求为出发点。软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 需求开发: 需求获取需求分析需求定义(需求规格说明书)需求验证 需求管理: 变更控制版本控制需求跟踪需求状态跟踪 需…

零基础Python经验体验代码检查工具

作者:yd_257945187 原文链接:零基础Python经验体验代码检查工具-云社区-华为云 1 开发小白自述 年初,我开始从java语言转战Python语言的开发,对于零基础python经验的人来说,要开发出高质量且安全性能高的Python 代码…

解决craco启动react项目卡死在Starting the development server的问题

现象: 原因:craco.config.ts配置文件有问题 经过排查发现Dev开发模式下不能有splitChunk的配置, 解决办法: 加一个生产模式的判断,开发模式不加载splitChunk的配置,仅在生产模式才加载 判断条件代码&#…

notepad++配置python2环境

(1)python2版本下载:Index of /ftp/python/2.7.8/https://www.python.org/ftp/python/2.7.8/ (2) 配置notepad环境 1.打开Notepad,点击“插件”-“插件管理器”,在“可用”选项卡中&#xff0c…

云安全之访问控制介绍

访问控制技术背景 信息系统自身的复杂性、网络的广泛可接入性等因素,系统面临日益增多的安全威胁,安全问题日益突出,其中一个重要的问题是如何有效地保护系统的资源不被窃取和破坏。 访问控制技术内容包括访问控制策略、访问控制模型、访问…

国庆周《Linux学习第二课》

Linux开篇指南针环境安装(第一课)-CSDN博客 Linux详细的环境安装介绍在上面 第一 环境准备过程 安装过程

Python绘图系统22:实现系统菜单

文章目录 文件菜单子部件开关 Python绘图系统: 前置源码: Python打造动态绘图系统📈一 三维绘图系统 📈二 多图绘制系统📈三 坐 标 轴 定 制📈四 定制绘图风格 📈五 数据生成导入📈…

React antd Table点击下一页后selectedRows丢失之前页选择内容的问题

一、问题 使用了React antd 的<Table>标签&#xff0c;是这样记录选中的行id与行内容的&#xff1a; <TabledataSource{data.list}rowSelection{{selectedRowKeys: selectedIdsInSearchTab,onChange: this.onSelectChange,}} // 表格是否可复选&#xff0c;加 type: …

uni-app打包iOS ipa文件后不上架App store为用户提供下载解决过程记录

写在前面&#xff0c;itms-services协议是什么 itms-services协议是苹果提供的一种让iOS应用在用户设备上无线安装或升级的协议。 具体来说: itms-services表示iOS应用无线安装服务的URL方案,格式为:itms-services://?actiondownload-manifest&urlMANIFEST_URL其中MANIF…

26661-2011 SWP大型十字轴式万向联轴器

声明 本文是学习GB-T 26661-2011 SWP大型十字轴式万向联轴器. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了SWP 大型十字轴式万向联轴器(以下简称大型万向联轴器)的型式、基本参数与尺 寸&#xff0c;技术要求&#xff0c;检验…

Vovsoft Text Edit Plus 专业文本编辑器工具软件:简洁高效的创作利器

作为一名专业软件评测人员&#xff0c;我有幸使用了一款备受赞誉的文本编辑器工具软件——Vovsoft Text Edit Plus。在这篇评测中&#xff0c;我将客观、细致地分析它的实用性和使用场景&#xff0c;同时揭示它的优缺点&#xff0c;帮助您更好地了解这款软件。 第一部分&#x…

Java集成Onlyoffice以及安装和使用示例,轻松实现word、ppt、excel在线编辑功能协同操作,Docker安装Onlyoffice

安装Onlyoffice 拉取onlyoffice镜像 docker pull onlyoffice/documentserver 查看镜像是否下载完成 docker images 启动onlyoffice 以下是将本机的9001端口映射到docker的80端口上&#xff0c;访问时通过服务器ip&#xff1a;9001访问&#xff0c;并且用 -v 将本机机/data/a…

【AI视野·今日Robot 机器人论文速览 第四十二期】Wed, 27 Sep 2023

AI视野今日CS.Robotics 机器人学论文速览 Wed, 27 Sep 2023 Totally 48 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;***Tactile Estimation of Extrinsic Contact,基于触觉的外部接触估计与稳定放置 (from 三菱电机) &#x1f4da;充气型…

Visual Studio 2017 安装

C自学精简实践教程 目录(必读) 这篇文章会保证你第一次安装VS2017就成功运行Hello World! 下载Visual Studio Installer Gitee 下载 VS2017/vs2017_Community.exe CalmReason/VisualStudio - 码云 - 开源中国 (gitee.com) 百度云下载 链接&#xff1a;https://pan.baidu…

照片后期处理软件DxO FilmPack 6 mac中文说明

DxO FilmPack 6 for Mac是一款照片后期处理软件。它可以模拟超过60种著名胶片品牌和类型的色彩和颗粒感&#xff0c;使照片具有复古、艺术和时尚风格。 ​DxO FilmPack 6 mac支持RAW和JPG格式的照片&#xff0c;并提供丰富的调整选项&#xff0c;如亮度、对比度、曝光、阴影和高…