AHK 新手脚本不稳定,很多时候不是命令写错,而是全局设置没想清楚。尤其是 SetTitleMatchMode、CoordMode、DetectHiddenWindows 这三个设置,看起来不起眼,却会直接影响窗口查找、鼠标坐标、图片识别和隐藏窗口判断。
一、SetTitleMatchMode:窗口标题怎么匹配
SetTitleMatchMode 决定 WinActivate、WinWait、WinExist 等窗口命令如何匹配标题。如果你写 WinActivate, 记事本 有时找不到窗口,第一件事就该检查它。
#Requires AutoHotkey v1.1
#NoEnv
#SingleInstance Force
SetTitleMatchMode, 2 ; 标题包含指定文本即可匹配
if WinExist("记事本") {
WinActivate
} else {
MsgBox, 没找到记事本窗口
}
常见模式里,1 表示标题开头匹配,2 表示标题包含匹配,3 表示标题完全匹配。日常脚本里,SetTitleMatchMode, 2 很常用,因为窗口标题经常会带文件名、网页标题或状态文字。
二、CoordMode:坐标到底相对谁
CoordMode 决定鼠标、像素、ToolTip、菜单等坐标是相对屏幕、窗口还是客户端区域。找图找色、点击坐标不准,很多时候就是 CoordMode 没统一。
CoordMode, Mouse, Screen CoordMode, Pixel, Screen CoordMode, ToolTip, Screen MouseMove, 100, 100, 0 PixelGetColor, color, 100, 100, RGB ToolTip, % "屏幕坐标 100,100 颜色:" color, 100, 130
如果脚本用的是全屏截图、全屏找图、全屏点击,建议把 Mouse 和 Pixel 都设为 Screen。否则你以为点的是屏幕坐标,AHKv1 实际默认是按窗口相对坐标系来解释坐标的,就会偏得很离谱。
三、DetectHiddenWindows:隐藏窗口算不算存在
DetectHiddenWindows 决定窗口命令是否能检测隐藏窗口。默认情况下,隐藏窗口通常不会被普通窗口命令找到。
DetectHiddenWindows, On
if WinExist("ahk_class AutoHotkey")
MsgBox, 找到了隐藏或可见的 AHK 窗口
else
MsgBox, 没找到
这个设置在控制后台脚本窗口、隐藏 GUI、托盘程序、某些辅助窗口时很有用。但也要注意,打开后可能匹配到你原本不想匹配的隐藏窗口,所以窗口条件要写得更准确。
四、这三个设置建议放在哪里
它们通常应该放在自动执行段,也就是脚本开头初始化区域。这样后面的热键、定时器、函数都在同一套规则下工作。
#NoEnv #SingleInstance Force SetTitleMatchMode, 2 CoordMode, Mouse, Screen CoordMode, Pixel, Screen DetectHiddenWindows, Off return F1:: MouseGetPos, x, y MsgBox, % "当前屏幕坐标:" x ", " y return
五、排查时先看全局设置
- AHKv1 默认参数是按窗口相对坐标,可按需修改坐标系参考。
- 窗口找不到:先看
SetTitleMatchMode和窗口标题条件。 - 点击位置不对:先看
CoordMode, Mouse。 - 找图找色偏移:先看
CoordMode, Pixel。 - 隐藏窗口找不到:先看
DetectHiddenWindows。 - 匹配到奇怪窗口:标题条件太宽,或者隐藏窗口被算进来了。
全局设置的特点是:它们不显眼,但影响范围很大。新手写脚本时,最好在开头就把这些规则写明白,不要让脚本在默认规则里碰运气。

评论(0)