实现 SPY++ 的 FindWindow Tool 的高亮

借助Spy++向指定的窗口发送消息—2  前一部分,我已经完成了程序的基本框架,首先通过SPY查找到主窗体的主标题,然后在程序中根据主标题找到翻译软件的窗口指针,然后根据主窗口指针来枚举所有的子窗口(包括子窗口的子窗口);在枚举子窗口的过程中,每找到一个子窗口,系统会调用 EnumProc函数来做相应的处理。下面我要在 EnumProc函数中做些“动作”。 系统每找到一个子窗口就会进入 EnumProc函数,当然也包括找 阅读详情

实现 SPY++ 的 FindWindow Tool 的高亮(highlight)一个应用程序的窗体或内部 Object 的边缘

方法一:  
通过  SelectObject  来实现  
 
procedure  InvertTracker(hwndDest:  HWND);  
//画边框  
var  
 hdcDest      :  HWND;  
 hPen            :  HWND;  
 hOldPen      :  HWND;  
 hOldBrush  :  HWND;  
 cr                :  HWND;  
 rc                :  TRect;  
begin  
 GetWindowRect(hwndDest,  rc);  
 hdcDest  :=  GetWindowDC(hwndDest);  
 SetROP2(hdcDest,R2_NOT);  
 cr        :=  clBlack;  
 hPen    :=  CreatePen(PS_INSIDEFRAME,2,cr);  
 
 hOldPen      :=  SelectObject(hdcDest,  hPen);  
 hOldBrush  :=  SelectObject(hdcDest,  GetStockObject(NULL_BRUSH));  
 Rectangle(hdcDest,  0,  0,  rc.Right  -  rc.Left,  rc.Bottom  -  rc.Top);  
 SelectObject(hdcDest,  hOldBrush);  
 SelectObject(hdcDest,  hOldPen);  
 
 ReleaseDC(hwndDest,  hdcDest);  
 DeleteObject(hPen);  
end;      
 
 
方法二:  
将边框区域颜色取反  
 
procedure  HighlightWindow(hWndWindow:  HWND);  
var  hDCWindow:  HDC;  
     RECT:  TRect;  
     DINV:  Integer;  
begin  
 if  (hWndWindow  =  0)  or  (Not  IsWindow(hWndWindow))  then  
     Exit  
 else  begin  
     hDCWindow  :=  GetWindowDC(hWndWindow);  
     Windows.GetWindowRect(hWndWindow,  RECT);  
     OffsetRect(RECT,  -RECT.Left,-RECT.Top);  
 
     DINV  :=  4;  
     if  Not  IsRectEmpty(RECT)  then  
     begin  
         PatBlt(hDCWindow,  RECT.Left,  RECT.Top,  RECT.Right  -  RECT.Left,  DINV,  DSTINVERT);  
         PatBlt(hDCWindow,  RECT.left,  RECT.bottom  -  DINV,  DINV,  
                     -(RECT.bottom  -  RECT.top  -  2  *  DINV),  DSTINVERT);  
         PatBlt(hDCWindow,  RECT.right  -  DINV,  RECT.top  +  DINV,  DINV,  
                     RECT.bottom  -  RECT.top  -  2  *  DINV,  DSTINVERT);  
         PatBlt(hDCWindow,  RECT.right,  RECT.bottom  -  DINV,  -(RECT.right  -  RECT.left),  
                     DINV,  DSTINVERT);  
     end;  
     ReleaseDC(hWndWindow,  hDCWindow);  
 end;  
end;  
 
不过这两个都无法实现异型窗体的高亮,  

使用SPY++查看窗口信息去分析C++客户端UI软件问题 阅读详情

相关推荐

谷歌浏览器网页元素分析工具+Chrome_SPY+元素捕获+PRA

谷歌浏览器网页元素分析工具+Chrome_SPY+元素捕获+PRA

spy++中的Finder tool的实现

比较赶兴趣其中的图标,找了还是被找到,在这里共享一下吧http://www.codeproject.com/dialog/windowfinder.asp 

jhb92的专栏 862

64位 Spy++

免安装64位SPY++,绿色解压即可使用

spy++是可以获取浏览器当前页面的标题的,并且可以根据“窗口标题”和“类名”实现对浏览器的显示和隐藏,

目前测试Firefox和Chrome都是可以的 以下是例子 头文件mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QProcess> #include <QWindow> #include <QDebug> #include <QStringList> #include <Windows.h> #includ

ffrost的博客 949

MobaXterm终端工具个人学习版安装包及常用配置备份

资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

自动化测试中FindWindow与FindWindowEx的使用示例

昨天在做一个网页测试时,它会弹出一个对话框(如下图)对用户进行一个认证。 使用Spy++侦测这个对话框的结构如下,我们看到两个Edit就在最后两个节点上。 我们现在就可以利用FindWindow以及FindWindowEx这两个函数来帮我们找到这个窗体及窗体上所有的控件,然后帮我们完成自动化测试。 下面这个程序就是帮我们自动输入用户名与密码。 using System; using System.Collections.Generic; using System.Linq; u

biyusr的专栏 1161

微信小游戏审核避坑指南:如何一次性通过微信审核(附最新审核要求)

本文详细解析微信小游戏审核全流程,提供从开发到上线的关键策略,帮助开发者一次性通过审核。涵盖合规性自查、材料优化、开发环境配置、版本管理、审核材料填写技巧等核心内容,并附最新审核要求和常见驳回问题解决方案,显著提升审核通过率。

weixin_28454475的博客 1411

Spy++查看窗口类名和窗口标题名

vs自带的Spy++查看窗口类名和窗口标题名 用FindWindow()函数时,需要窗口类名或者窗口标题名 函数原型: HWND FindWindow { LPCTSTR lpClassName, LPCTSTR lpWindowName } 此时可以用vs自带的spy++可以查看。 1.[工具] –[Spy++(+)] 或者:vs安装目录下的\visual studio 2019\Common7\Tools 打开界面如下,选择红色箭头的所指按钮 2.左键按住查找程序工具不放,拖动至需要查询的窗口处

Mo的博客 1万+

【同花顺公式编辑教程】第4章 功能函数

本章节主要给出大部分能够运行且常用的同花顺指标编辑器提供的函数。其中,计算类函数不作演示,绘图类函数提供示例及示例运行结果。

LiaoYi2016218的博客 2万+

域自适应的理解与想法(Domain Adaptation)

这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数.

yuanxue18的博客 5982

C# 自己动手实现Spy++(一)

因为项目要用到获取其他程序的标题,就想到了用Spy++,但是它是一个工具,并没有C#的源代码,所以就想探索下他的原理,网上搜索了下spy++的源代码,找到了一篇:http://blog.youkuaiyun.com/asanscape/article/details/2140176,是用VC写的,又从优快云下载了一个资源:http://download.youkuaiyun.com/detail/zjhzznzlx/2

xtfnpgy 7353

深入解析Dataloader中shuffle机制与随机种子对模型训练的影响

本文深入探讨了Dataloader中shuffle机制与随机种子对机器学习模型训练的影响。通过实际案例分析,详细解释了数据打乱顺序的必要性、随机种子的正确设置方法以及两者协同工作的原理,帮助开发者避免常见陷阱并提升模型训练效果。

weixin_29166013的博客 141

Windows系统 “进程、线程、窗口、窗口消息“ 分析工具:Accessibility Insights、spy、Inspect

Windows系统 “进程、线程、窗口、窗口消息“ 分析工具:Accessibility Insights、spy、Inspect

freeking101的博客 8787

如何通过单步调试的方法,找到 SAP Gateway 到底把 Fiori 应用发送的 OData 请求,投递到哪一台 ABAP 后台服务器了?

这是一个 Count 请求,得到服务器响应的数据是 204,这个 204 会以数字的形式,显示在 Fiori Launchpad tile 上。那如果当前 Gateway 系统可以连接到多台 ABAP 后台服务器,比如下图所示,可以连接 SAP S/4HANA,ERP 或者 SAP CRM,我怎么知道 SAP UI5 应用上显示的数据,到底来自哪一台 ABAP 后台服务器呢?,就是上图 ABAP 调试器里断点停留的位置,即 SAP Frontend 服务器,通过 RFC 将 OData 请求投递给。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 642

Android AVB 分析(十六)5 个例子彻底理解 FEC(Reed-Solomon) 的工作原理

关于 FEC 是如何工作的,一直是我 Android OTA 讨论群中的未解话题,大家基本上都不清楚 Android 上面的 FEC 是如何工作的,为什么在 OTA 升级的最后阶段,FEC 的编码计算会消耗大量的 IO 资源,并持续很长时间。接下来的几篇,我会从一个程序员的角度,演示基于里德所罗门编码的 FEC 到底是如何工作的。

洛奇看世界 668

spy++窗口句柄分析工具:助力开发者精准获取窗口信息

spy++窗口句柄分析工具:助力开发者精准获取窗口信息 【下载地址】spy窗口句柄分析工具 spy++窗口句柄分析工具是一款专为开发者设计的实用工具,能够帮助您在开发过程中通过findwindow函数准确获取窗口句柄。它能够扫描并分析电脑中的所有窗口信息,轻松获取窗口标题、窗口类等详细数据,极大地方便了程序开发。使用本工...

gitblog_06721的博客 367

NVIDIA Jetson之远程控制软件NoMachine安装使用

参考:https://www.bilibili.com/video/BV1cg4y1i776?t=12 0 背景

ZONGXP的博客 1万+

java 块传输_位图和位块传输(1)BitBlt与PatBlt

BitBlt读作"bit blit"表示位块传输,BitBlt函数是像素移动者,或者,更生动的说,点阵撞击者,下面是一个简单的BitBlt#includeLRESULT CALLBACK WindowProc(HWND hwnd, // handle to windowUINT uMsg, // message identifierWPARAM wParam, // firs...

weixin_32602879的博客 303

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MFC PatBlt

PatBlt函数 PatBlt()函数的名字其实是一个缩写,全称应该是“图样块传送”(PATtern BLock Transfer, 缩写后就是PatBlt),从这个名字上看,它好像只是简单的复制画刷(或叫图样),直到填充完指定的矩形之后就结束了,其实这个函数可没有这么简单,它在复制画刷之前,将根据光珊操作码(raster operation,缩写是ROP)来组合图样中的像素与目标DC中

u013537860的专栏 1408

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

点阵图和Bitblt

点阵图是一个二维的位元阵列,它与图像的图素一一对应。当现实世界的图像被扫描成点阵图以後,图像被分割成网格,并以图素作为取样单位。在点阵图中的每个图素值指明了一个单位网格内图像的平均颜色。单色点阵图每个图素只需要一位元,灰色或彩色点阵图中每个图素需要多个位元。点阵图代表了Windows程式内储存图像资讯的两种方法之一。储存图像资讯的另一种形式是metafile,我将在第十八章讨论。Metafile储

废弃blog 8292

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Java 的 HTTP 文件队列下载
下一篇: USB虚拟串口
vrix
博客等级 码龄24年 673粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值