AHK中PixelGetColor持续返回True问题求助
AutoHotKey脚本问题排查与修复
核心错误分析
- 误用
PixelGetColor命令:PixelGetColor仅用于获取单个坐标的颜色值,无法实现“带偏差的颜色搜索”需求,应使用专门的PixelSearch命令。 else语句语法无效:每个if后的else无对应代码块,导致后续所有Send命令不受条件判断约束,无论是否找到目标颜色都会依次执行,最终持续输出12345循环。- 冗余的
CoordMode设置:CoordMode, Pixel, Screen只需在脚本初始化阶段设置一次,无需每次调用颜色命令前重复执行。 return位置错误:return放在循环内部会导致循环提前终止,但因前面的语法问题,该语句实际未生效。
修复后的代码
CoordMode, Pixel, Screen ; 全局设置像素坐标为屏幕坐标系,仅需执行一次 Loop { ; 搜索第一个坐标点(200,200),1x1区域,匹配红色(0xFF0000)及偏差3的颜色 PixelSearch, FoundX, FoundY, 200, 200, 200, 200, 0xFF0000, 3, FastRGB if ErrorLevel = 0 Send, 1 ; 搜索第二个坐标点(400,400) PixelSearch, FoundX, FoundY, 400, 400, 400, 400, 0xFF0000, 3, FastRGB if ErrorLevel = 0 Send, 2 ; 搜索第三个坐标点(600,600) PixelSearch, FoundX, FoundY, 600, 600, 600, 600, 0xFF0000, 3, FastRGB if ErrorLevel = 0 Send, 3 ; 搜索第四个坐标点(800,800) PixelSearch, FoundX, FoundY, 800, 800, 800, 800, 0xFF0000, 3, FastRGB if ErrorLevel = 0 Send, 4 ; 搜索第五个坐标点(1000,1000) PixelSearch, FoundX, FoundY, 1000, 1000, 1000, 1000, 0xFF0000, 3, FastRGB if ErrorLevel = 0 Send, 5 } Numpad9::Pause Esc::ExitApp
可选优化(按需选择)
如果需要找到任意一个目标颜色后就停止当前循环的后续检查,可在每个Send后添加break:
if ErrorLevel = 0 { Send, 1 break ; 找到目标后跳出当前循环,不再检查剩余坐标 }
内容的提问来源于stack exchange,提问作者enerjii21
相关产品推荐
相关产品推荐

