AutoHotKey自动热键(四)WINDOWS程序窗口的9种匹配方法与Window Spy窗口检索的使用方法

news2024/11/14 19:23:16

我们在进行窗口匹配的时候,根据匹配类型的不同可以多种匹配方法,根据使用者目录中可以找到九种匹配方式,这些匹配方式大都需自带的SPY监视工具用以查看窗口的名称.类名.进程名.句柄ID.位置信息等等

Window Spy的使用方法★★★

软件界面

这个软件是安装好之后自带的一个脚本,它本身也是用AUTOHOTKEY脚本写成的,包括界面也是用的GUI包
在这里插入图片描述

各控件功能

从上图中可以看到所有的小窗口功能分别是

1.窗口标题

计算器
ahk_class ApplicationFrameWindow
ahk_exe ApplicationFrameHost.exe
ahk_pid 11952

计算器 = 窗口名<标题/Title>
ahk_class ApplicationFrameWindow = ahk_class <窗口类名>
ahk_exe ApplicationFrameHost.exe = ahk_exe <执行文件名>
ahk_pid 11952 = ahk_pid <进程ID>

2.鼠标位置信息

Screen: 300, 379 (less often used)
Window: -1283, -160 (default)
Client: -1291, -160 (recommended)
Color: F0F0F0 (Red=F0 Green=F0 Blue=F0)

Screen鼠标以屏幕左上角为原点的坐标X和Y值(较少使用)
Window鼠标以当前窗口左上角为原点的坐标X和Y值(默认)
Client鼠标以当前窗口的工作区左上角为原点的坐标X和Y值(推荐)此值一般最小
Color鼠标当前位置的屏幕RGB色值

3.焦点控制

ClassNN: Windows.UI.Core.CoreWindow1
Text: 计算器
x: 8 y: 1 w: 321 h: 532
Client: x: 0 y: 1 w: 321 h: 532

SPY软件当前能检测到的控件类名ClassNN为Windows.UI.Core.CoreWindow1

4.当前活动窗口位置

            x: 1583	y: 539	w: 337	h: 541
 Client:	x: 0	y: 0	w: 321	h: 533

x: 1583 y: 539 为窗口的左上角距离SCREEN原点的坐标
w: 337 h: 541为窗口的宽和高

5.状态栏文本

如果这个窗口中有名为Status Bar类的控件,则收录其中的文本

6.隐藏的文本(略)

7.所有文本(略)


程序窗口的9种匹配方法★★★★★

匹配方法说明
标题匹配窗口标题
A匹配活动窗口
ahk_class窗口类
ahk_id唯一 ID/HWND
ahk_pid进程 ID
ahk_exe进程名称、路径
ahk_group窗口组
-多重条件
(都为空)匹配上次找到的窗口

匹配标题

SetTitleMatchMode, 1
WinActivate, 计算器
  • 匹配标题是根据SetTitleMatchMode的模式来进行,分别有五种不同匹配模式
    • SetTitleMatchMode, 1 (默认模式)窗口标题必须以<关键词>为开头,比如窗口的全称为"计算器",激活该窗口使用<WinActivate, 计算>即可,只要前面的任意长度匹配即可
    • SetTitleMatchMode, 2 标题任意位置包含<关键词> 比如说还是刚才这个计算器, 那么<WinActivate, 算>或者<WinActivate, 器>都是可以匹配上的,当然前提是要保证这个关键词是所有窗口中唯一的
    • SetTitleMatchMode, 3 标题必须全部字符匹配上<关键词>错一个或多一个或少一个都不行,必须一字不差的匹配上,该模式下必须用<WinActivate, 计算器>才行
    • SetTitleMatchMode RegEx 正则表达式匹配, 该模式下刚才的匹配写成<WinActivate, .*?算.*>
    • SetTitleMatchMode, Fast (默认模式) 性能比起 Slow 有较大提升, 但某些类型窗口中的一些 WinText 可能无法被各种窗口命令检测到.
    • SetTitleMatchMode, Slow速度慢得多, 但窗口命令会获取窗口中所有可能的文本以寻找 WinText 匹配. Window Spy中会显示哪些部分的窗口文本(如果有)需要慢速模式才能匹配到。

匹配活动窗口

当前的活动窗口直接使用字母A代替

;最大化当前的活动窗口
WinMaximize, A

ahk_class 窗口类

匹配上刚才的计算器可以使用SPY当中获取到的窗口类,在匹配的时候,必须带上ahk_class来修饰后面的窗口类,在SPY当中直接整行复制即可

;让计算器窗口处理活动状态
WinActivate, ahk_class ApplicationFrameWindow

ahk_id 唯一 ID / HWND

匹配窗口的唯一ID号也就是句柄,用在特定的地方,比方说有同一个程序同时启动了10个同名窗口,而我需要匹配其中位置在Y轴上位置低于400像素的窗口进行最大化,可以用到这个方法先判断窗口的位置信息再获取窗口句柄的方法来定位

WinGet, id , List, 计算器
Loop , %id%{
    this_id := id%A_Index%
    WinGetPos,, winY, , cineHeight, ahk_id %this_id%
    if winY> 400 
    {
        WinMaximize, ahk_id %this_id%
    }
}

这样子就把所有窗口底于400像素高度的"计算器"窗口全部进行了最大化,因为WinGet获取的list列表就是一个句柄数组,所以在匹配的时候直接使用ahk_id %this_id%,这里的百分号是用来取值操作的,相当于一般语言中的变量值, 而%A_Index%是一个Loop循环中的内置变量,用来储存当前的循环序号, 而数组取下标值不需要一般语言中的[]符号,直接在变量名后面带上下标id1 id2等即可,所以this_id := id%A_Index%

ahk_pid 进程 ID

使用 ahk_pid 可以标识属于指定进程的窗口。进程标识符(PID)通常使用 WinGet、Run 或 Process 获取。这种方法一般要配合鼠标获取当前位置下的程序ID使用,如下例子(多重条件)

ahk_id 可以和其他条件组合来测试窗口标题、类名或其他属性,以下例子可以同时匹配鼠标所在位置的窗口ID

^F10::
MouseGetPos,,, id
if WinExist("ahk_exe ApplicationFrameHost.exe ahk_id " id)
    MsgBox 当前鼠标所指程序的ID在程序<计算器>上
Return

在这里插入图片描述
多重匹配方法详情参考下面的多重匹配

ahk_exe 进程名称、路径

使用 ahk_exe 可以标识含有指定名称路径的进程拥有的窗口。这个EXE名称可以从SPY当中获取,如果磁盘路径中的文件名和SPY当中获取的名称不一致,以SPY为准

;使计算器最大化
WinMaximize, ahk_exe ApplicationFrameHost.exe

ahk_group 窗口组

使用 ahk_group 可以标识匹配之前由窗口组定义的规则的窗口。

函数名功能
WinMinimize最小化
WinMaximize最大化
WinRestore恢复之前
WinHide隐藏
WinShow显示
WinClose关闭
WinKill强制关闭

以上每个都将对ahk_group组中的所有窗口进行操作。相比之下,其他窗口命令(例如 WinActivate 和 IfWinExist)仅对组中最顶层的窗口进行操作。

;将计算器程序和笔记本TXT工具加入窗口组,然后将组内所有窗口一起最大化
^F10::
    GroupAdd, myGroup, ahk_exe ApplicationFrameHost.exe 
    GroupAdd, myGroup, ahk_exe notepad.exe
    WinMaximize, ahk_group myGroup
Return

这个功能会将所有找到的匹配窗口全部加入到窗口组的数组对象当中,包括多个同名程序

多重条件

与 ahk_group (它活动了搜索范围)比起来,在 WinTitle 参数中指定多个条件可以缩小搜索范围。

  • 在下面的例子中, 脚本等待标题中包含 123456.txt 且 类名为 Notepad 的窗口出现然后最大化
^F10::
    WinWait 123456 ahk_class Notepad
    WinMaximize
Return

使用这种方法时,应该首先列出标题的文本(如果希望使用),后面跟着一个或多个附加条件。超过一个条件时条件之间必须准确地用一个空格或 tab 分隔 (其他任何空格或 tab 会被视为前面一个条件的文字部分).

  • 另一个例子请参考上面的ahk_pid 进程 ID, 在多重匹配的时候,ahk_pid写在最后面,并托上引号,再接真实的ID句柄

“上次找到的” 窗口

这是由以下函数最近找到的窗口,在当前程序的使用中,所有需要传参窗口的函数,都可以留空,也就是不传参,就相当于直接使用上次找到的窗口,比如先判定某窗口是否存在,然后再最大化

^F10::
if WinExist("ahk_exe ApplicationFrameHost.exe")
    WinMaximize
Return

可以看到在最大化窗口的时候,直接留空就直接最大化了上一行中找到的窗口

函数名功能
IfWin[Not]Exist存在某窗口
WinExist()存在某窗口(有返回值)
IfWin[Not]Active是否活动窗口
WinActive()是否活动窗口(有反回值)
WinWait[Not]Active等待窗口成为活动窗口
WinWait等待窗口启动

这样可以让脚本更容易创建和维护, 因为目标窗口的 WinTitle 和 WinText 不需要在每个窗口命令中重复. 同时, 脚本会执行的更好, 因为在首次找到目标窗口后这些命令不需要再次搜索目标窗口.

“上次找到的” 窗口可以用于除 WinWait, WinActivateBottom 和 GroupAdd 以外的所有窗口命令. 要使用它, 只需简单地省略所有的四个窗口参数 (WinTitle, WinText, ExcludeTitle 和 ExcludeText).

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

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

相关文章

「API取数」FDL获取金蝶云星空的单据数据

很多企业的ERP系统都在用金蝶云星空&#xff0c;金蝶云星空API是IT人员获取数据的重要来源&#xff0c; 常常用来生成定制化报表&#xff0c;进行数据分析&#xff0c;或是将金蝶云的数据与OA系统、BI工具集成。 通常情况下&#xff0c;IT人员需要使用Python、Java等语言编写脚…

十款绚丽的前端 CSS 菜单导航动画

CSS汉堡菜单是一种非常流行的PC端和移动端web菜单风格&#xff0c;特别是移动端&#xff0c;这种风格的菜单应用更为广泛。这款菜单便非常适合在手机App上使用&#xff0c;它的特点是当顶部菜单弹出时&#xff0c;页面内容将会配合菜单出现适当的联动&#xff0c;让整个页面变得…

【UE Lua】 快速入门(基础语法、与UE引擎的交互)

目录 0 引言1 基础语法1.1 变量和数据类型1.2 注释1.3 控制结构1.4 函数1.5 表&#xff08;Table&#xff09;1.6 元表&#xff08;Metatable&#xff09;1.7 字符串操作1.8 模块和包1.9 错误处理 2 数据结构 - 表2.1 表&#xff08;Table&#xff09;2.2 元表&#xff08;Meta…

ElasticSearch学习篇14_《检索技术核心20讲》进阶篇之大倒排索引

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 内容 主要是海量数据的大倒排索引的一些原理设计思想&#xff0c;ES底层就是基于这些设计思想以及原理&#xff0c;主要涉及读写分离、索引分层等…

【DFS(深度优先搜索)详解】看这一篇就够啦

【DFS详解】看这一篇就够啦 &#x1f343;1. 算法思想&#x1f343;2. 三种枚举方式&#x1f343;2.1 指数型枚举&#x1f343;2.2 排列型枚举&#x1f343;2.3 组合型枚举 &#x1f343;3. 剪枝优化&#x1f343;4. 图的搜索&#x1f343;5. 来几道题试试手&#x1f343;5.1 选…

淘宝扭蛋机小程序搭建全攻略

一、引言 在数字化时代&#xff0c;线上娱乐方式层出不穷&#xff0c;其中扭蛋机小程序以其独特的互动性和趣味性&#xff0c;受到了广大用户的喜爱。淘宝扭蛋机小程序作为其中的佼佼者&#xff0c;不仅为用户提供了丰富的奖品选择&#xff0c;还通过创新的玩法和营销策略&…

【计算机毕业设计】018基于weixin小程序实习记录

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Scrapy crawl spider 停止工作

Scrapy是一个用于爬取网站数据的流行框架&#xff0c;有时爬虫可能会停止工作&#xff0c;这通常是由多种原因引起的。以下是一些常见问题及其解决方法&#xff1a; 1、问题背景 用户在使用 Scrapy 0.16.2 版本进行网络爬取时遇到问题&#xff0c;具体表现为爬虫在运行一段时间…

OV SSL证书—防止钓鱼攻击的最佳证书

据Menlo Security日前发布的《2023年浏览器安全状况报告》&#xff0c;针对浏览器的高度规避自适应威胁&#xff08;HEAT&#xff09;呈现激增的发展趋势。 钓鱼攻击概率激增&#xff1a; 安全研究人员发现&#xff0c;与上半年相比&#xff0c;2023年下半年基于浏览器的网络…

大野耐一是如何为丰田铸就精益生产的?

在制造业的漫长历史中&#xff0c;无数的革新者和企业家为追求更高效、更精益的生产方式而不懈努力。其中&#xff0c;大野耐一的名字无疑是这段历史中最为耀眼的星辰之一。他&#xff0c;以其卓越的才智和坚韧的毅力&#xff0c;为丰田汽车公司铸就了一套享誉全球的精益生产体…

windows上部署python3.11

hello&#xff0c;大家好&#xff0c;我是一名测试开发工程师&#xff0c;至今已在自动化测试领域深耕9个年头&#xff0c;现已将本人实战多年的多终端自动化测试框架【wyTest】开源啦&#xff0c;在接下来的一个月里&#xff0c;我将免费指导大家使用wyTest&#xff0c;请大家…

软件安全性测试的工具有哪些?

软件安全性测试是确保软件系统在设计和实施过程中能够保护系统的机密性、完整性和可用性。为了进行软件安全性测试&#xff0c;有许多工具可供选择&#xff0c;这些工具可以帮助测试人员发现潜在的安全漏洞和弱点&#xff0c;从而提高软件系统的安全性。 以下是一些常用的软件安…

游戏提示找不到steam_api64.dll无法继续执行代码的处理方法

相信很多人在玩游戏时候打开游戏时候&#xff0c;经常会遇到各式各样的小问题&#xff0c;比如steam_api64.dll丢失或许找不到steam_api64.dll无法打开游戏就是其中常见问题之一&#xff0c;那么遇到steam_api64.dll丢失问题要如何解决呢&#xff1f;今天我就给大家详细分析一下…

无人直播怎么玩,一文带你了解AI小姐姐自动换装玩法

最近经常有小伙伴问我 就是像这种&#xff0c;一刷礼物&#xff0c;小姐姐就换装的视频到底该怎么做 今天就来教大家 如何来制作这种直播视频 第一步&#xff1a;搭建OBS 1、设置屏幕分辨率&#xff1a; 背景&#xff1a;因为一般初始状态&#xff0c;屏幕是横屏的&#xf…

【Linux】进程补充知识

文章目录 前言磁盘与物理内存 数据交互局部性原理页表 前言 磁盘是计算机唯一的一个机械设备&#xff0c;在磁盘文件系统中&#xff0c;我们了解到&#xff0c;磁盘的数据读取写入相比物理内存&#xff0c;CPU等效率低了很多。但是其作为数据的载体&#xff0c;物理内存与其交…

阿里达摩院——寻光:用AI,实现视频创作一条龙!

7 月 6 日&#xff0c;在2024 世界人工智能大会&#xff08;WAIC 2024&#xff09;上&#xff0c;阿里达摩院推出了一站式 AI 视频创作平台 —— 寻光&#xff0c;今天带大家提前来了解一下这款工具&#xff5e; 1、关于“寻光” 寻光是一个拥有辅助用户创作剧本、分镜图等&am…

NAT:地址转换技术

为什么会引入NAT&#xff1f; NAT&#xff08;网络地址转换&#xff09;的引入主要是为了解决两个问题 IPv4地址短缺&#xff1a;互联网快速发展&#xff0c;可用的公网IP地址越来越少。网络安全&#xff1a;需要一种方法来保护内部网络不被直接暴露在互联网上。 IPv4 &…

网络服务器配置与管理

网络服务器配置与管理是一个涉及多个方面的领域&#xff0c;它涵盖了从物理硬件的设置到操作系统、网络服务和应用的配置&#xff0c;再到日常维护和安全策略的实施。以下是网络服务器配置与管理的一些核心概念和步骤&#xff1a; 硬件配置&#xff1a; 选择合适的服务器硬件&a…

git简介以及git操作软件下载以及安装教程,git基础指令介绍,持续更新中~

什么是Git&#xff1f; 最近在学一些git的基础指令&#xff0c;仔细地了解了一下git&#xff0c;发现了他的强大功能&#xff0c;分享一下&#xff1a; Git是一个强大的工具&#xff0c;它在软件开发中扮演着至关重要的角色。 Git是一个开源的分布式版本控制系统&#xff0c;…

GET与POST请求的区别【随记】

区别 1. 请求参数的传递方式 2. 安全性 3. 数据量 4. 幂等性 5. 用途 在Java中&#xff0c;GET和POST请求是通过HTTP协议与服务器进行通信的两种常用方法&#xff0c;它们之间有一些关键的区别&#xff1a; 1. 请求参数的传递方式 GET请求&#xff1a;将参数直接附加在U…