必须先完成窗口信息采集,方法包括:一、用window spy工具实时捕获;二、用winget命令动态获取窗口属性;三、用controlget枚举控件;四、用mousegetpos+winexist实现鼠标悬停捕获;五、调用powershell、spy++等外部工具辅助识别。

如果您需要在AutoHotkey脚本中精准操作目标窗口或控件,但无法获知其窗口类名、进程名、控件ID等关键标识信息,则必须先完成窗口信息采集。以下是获取这些信息的多种实用方法:
一、使用AutoHotkey内置Window Spy工具
Window Spy是AHK官方提供的轻量级调试工具,可实时捕获活动窗口的标题、类名、进程名、句柄(HWND)、客户区坐标及底层控件的文本、ID、类名等静态属性,无需编写代码即可完成基础信息提取。
1、确保AutoHotkey已成功安装(v2.0.19或更高版本);
2、点击系统托盘区的AutoHotkey图标,右键选择Window Spy;
3、将鼠标悬停在目标窗口任意位置(如记事本主界面、Chrome地址栏、微信登录按钮),Window Spy窗口将自动刷新显示该窗口的完整元数据;
4、重点关注【Window Title, Class and Process】区域中的ahk_class(窗口类名)、ahk_exe(进程名)、【Control Under Mouse】区域中的Control ID(控件ID)和ClassNN(控件类名+序号);
5、若需复制某项内容,可直接选中文本后按Ctrl+C。
二、通过WinGet命令在脚本中动态获取窗口信息
当目标窗口处于动态变化状态(如标题含时间戳、随机字符串),或需在运行时校验窗口是否存在时,应使用WinGet系列命令主动查询,避免硬编码标题导致匹配失败。
1、使用WinGet, ID获取窗口句柄:WinGet, targetID, ID, 无标题 - 记事本;
2、使用WinGet, Exe获取对应进程名:WinGet, procName, Exe, ahk_id %targetID%;
3、使用WinGet, Class获取窗口类名:WinGet, winClass, Class, ahk_id %targetID%;
4、使用WinGet, PID获取进程ID:WinGet, pid, PID, ahk_id %targetID%;
5、将上述结果写入MsgBox或日志文件便于验证:MsgBox "类名:" winClass "`n进程名:" procName "`nPID:" pid。
三、通过ControlGet命令枚举并提取控件信息
Window Spy对某些采用自绘技术(如Electron、WPF、DirectUI)的现代应用控件识别能力有限,此时需结合ControlGet命令主动遍历控件列表,获取可用的Control ID或ClassNN,并辅以文本/颜色/坐标特征进行二次定位。
1、启用持久化定时器持续监控当前活动窗口:#Persistent SetTimer, WatchActiveWindow, 200;
2、定义监控函数:WatchActiveWindow: WinGet, ControlList, ControlList, A;
3、将控件列表输出至浮动提示框:ToolTip, %ControlList%;
4、运行脚本后切换至目标窗口,观察ToolTip中逐行显示的控件名称(如Button1、Edit2、ComboBox3);
5、对疑似目标控件,用ControlGetText或ControlGetPos进一步验证其文本内容与相对位置:ControlGetText, btnText, Button1, A。
四、使用MouseGetPos + WinExist组合实现鼠标悬停式动态捕获
对于频繁弹出又关闭的临时窗口(如右键菜单、气泡提示、快捷设置面板),无法稳定触发Window Spy手动抓取,此时可借助鼠标实时坐标反查窗口上下文,实现“所见即所得”的信息捕获。
1、启动循环监听:Loop { MouseGetPos, mx, my, hwnd, control };
2、检测鼠标是否悬停于有效窗口上:if (hwnd != 0 && WinExist("ahk_id " hwnd)) { };
3、在条件块内调用WinGet获取该窗口全部属性:WinGet, title, Title, ahk_id %hwnd%;
4、同步获取控件信息:WinGet, class, Class, ahk_id %hwnd%;
5、将结果实时显示在屏幕角落:ToolTip "标题:" title "`n类名:" class "`n句柄:" hwnd "`n控件:" control;
6、按下Esc键退出监听:Esc::ExitApp。
五、通过Ahk2Exe打包后的独立EXE调用外部工具辅助识别
当脚本已编译为EXE且需脱离AHK运行环境部署时,Window Spy不可用,此时可调用Windows原生工具或第三方轻量工具补足信息采集能力。
1、在脚本中执行PowerShell命令获取窗口类名:RunWait, PowerShell -Command "& {[System.Diagnostics.Process]::GetProcessesByName('notepad')[0].MainWindowHandle | ForEach-Object {Get-Process -Id $_.Id | Select-Object MainWindowTitle, MainWindowHandle}}", , Hide;
2、调用Spy++(位于Visual Studio安装目录下)并传入窗口句柄参数:Run, "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\spyxx.exe" /hwnd %hwnd%;
3、使用AutoIt3 Window Info工具(需提前安装):Run, "C:\Program Files\AutoIt3\Au3Info.exe";
4、在AHK脚本中等待外部工具窗口激活后,用WinWaitActive配合WinGet读取其输出窗口标题或文本字段:WinWaitActive "Window Info", , 3;
5、使用ControlGetText从外部工具界面中提取已识别的类名或ID值。











