AHK 控制窗口时,很多命令都要填写 WinTitle,例如 WinActivate、WinWait、ControlClick。新手最容易纠结的是:到底该用窗口标题、类名、进程名、PID,还是句柄?
这篇文章的主旨很简单:真正推荐优先使用 ahk_class。因为窗口类名通常是窗口自身固定的类型标识,比标题更稳定,也比单独用 ahk_exe 更能指定到某一类窗口。更稳的写法是 ahk_class 加完整标题,或者加标题前几个字。
一、为什么优先推荐 ahk_class
ahk_class 表示窗口类名。对很多软件来说,主窗口、设置窗口、弹窗、登录窗口会有各自固定的类名。标题可能会随着文档名、网页名、语言变化而变化,进程名只能说明它属于哪个程序,而类名更接近“这是哪一种窗口”。
#Requires AutoHotkey v1.1
#NoEnv
#SingleInstance Force
SetTitleMatchMode, 2
WinActivate, ahk_class Notepad
WinWaitActive, ahk_class Notepad,, 2
if ErrorLevel
{
MsgBox, 没有找到或无法激活目标窗口
return
}
这就是为什么写稳定脚本时,不建议只凭窗口标题猜,也不建议一上来就只用 ahk_exe。先用工具拿到窗口类名,再围绕类名组合条件,脚本会稳很多。
二、ahk_class 加标题更确定
如果同一个软件里有多个相同类名窗口,只写 ahk_class 可能还不够。这时可以把类名和标题组合起来:类名负责限定窗口类型,标题负责限定具体内容。
SetTitleMatchMode, 2 WinActivate, 订单列表 ahk_class Chrome_WidgetWin_1
标题不一定要写完整。对于经常变化的窗口,可以写标题前几个稳定的字;对于固定窗口,可以写完整标题。组合条件越贴近真实窗口,误匹配概率就越低。
三、用 AHKInfo 获取窗口信息
窗口类名不要靠猜,应该用工具获取。可以用 AHKInfo 查看窗口标题、类名、进程名、PID、句柄等信息。本站的 AHKEditor 里附带了 AHKInfo,写窗口自动化前建议先打开它取信息。
; AHKInfo 里常见会看到类似信息: ; Title: 无标题 - 记事本 ; Class: Notepad ; Process: notepad.exe ; PID: 12345 ; HWND: 0x001A0B2C WinActivate, 无标题 ahk_class Notepad
新手常犯的错是只复制标题,不看类名。标题看起来最直观,但也是最容易变化的;类名虽然不那么好记,却更适合写进脚本。
四、ahk_exe 适合简单应用或系统应用
ahk_exe 不是不能用,而是不要把它当成最推荐的通用方案。它适合简单应用、系统应用,或者目标程序只有一个明确主窗口的情况。比如记事本、计算器、某些小工具,用进程名就很方便。
WinActivate, ahk_exe notepad.exe
WinWaitActive, ahk_exe notepad.exe,, 2
if ErrorLevel
{
MsgBox, 记事本没有激活
return
}
但大型软件、浏览器、多窗口程序只靠 ahk_exe 很容易范围过大。比如 Chrome、Edge、Excel、专业软件,都可能同时存在多个窗口。此时更建议用 ahk_class 搭配标题,而不是只写进程名。
五、PID 适合脚本自己启动的程序
如果程序是脚本自己启动的,Run 可以拿到 PID。PID 适合区分多个同名进程,但它不是长期稳定标识,程序重启后 PID 会变。
Run, notepad.exe,,, pid
WinWait, ahk_pid %pid%,, 3
if ErrorLevel
{
MsgBox, 新启动的窗口没有出现
return
}
WinActivate, ahk_pid %pid%
所以 PID 更适合“本次脚本运行期间,我只控制自己启动的这个实例”。不要把 PID 写死到配置文件里长期使用。
六、句柄 ahk_id 适合最终精确控制
句柄可以理解为当前窗口对象的编号。只要窗口还存在,ahk_id 非常精确。常见套路是先用 ahk_class 和标题找到窗口,再取 hwnd,后续操作都用 ahk_id。
SetTitleMatchMode, 2
WinGet, hwnd, ID, 无标题 ahk_class Notepad
if !hwnd
{
MsgBox, 没有找到目标窗口
return
}
WinActivate, ahk_id %hwnd%
ControlGetText, text, Edit1, ahk_id %hwnd%
MsgBox, %text%
句柄不适合跨窗口关闭重开后继续使用。窗口一旦销毁,再打开通常就是新的句柄。它适合当前运行期间的精确控制。
七、推荐选择顺序
- 首选:用 AHKInfo 获取
ahk_class,先按窗口类名定位。 - 更确定:
ahk_class+ 完整标题,或ahk_class+ 标题前几个稳定字。 - 简单应用:系统应用、小工具、单窗口程序可以用
ahk_exe。 - 脚本启动:自己 Run 出来的程序,可以保存 PID,用
ahk_pid。 - 连续操作:先找到窗口并保存 hwnd,后续用
ahk_id。
窗口控制不是看哪个字段写起来最顺手,而是看哪个字段最稳定。对多数桌面窗口脚本来说,ahk_class 才应该放在首位;再根据需要叠加标题、进程名、PID 或句柄,脚本就会更可靠。

评论(0)