AHK中PixelGetColor与PixelSearch功能失效问题排查求助
问题原因及修复方案
第一个函数(PixelGetColor版本)核心错误点
- 循环逻辑失效:你初始化
cond = -1作为循环条件,但首次执行PixelGetColor就会将cond赋值为实际取到的色值,只要第一个色值不匹配F1F1F1,cond就不再等于-1,循环最多执行1次。如果本次4个色值都未匹配,函数没有任何有效返回值,调用侧的cond <=1/cond >=2判断自然失效。 - 色值比较格式不匹配:AHK中
PixelGetColor返回的RGB色值是带0x前缀的十六进制数值,你直接和不带前缀的字符串比较会出现判定偏差,你的测试代码能运行是因为msgbox输出时自动省略了0x前缀,实际变量存储是带前缀的。
修复后的第一个函数代码
CheckConditionColor() { while true ; 改为无限循环,匹配到对应色值才退出 { pixelgetcolor, cond, 137, 298, RGB if cond = 0xF1F1F1 ;excellent return 3 pixelgetcolor, cond, 77, 302, RGB if cond = 0xAAAAAA ;normal return 0 pixelgetcolor, cond, 78, 301, RGB if cond = 0xF1F1F1 ;poor return 1 pixelgetcolor, cond, 105, 297, RGB if cond = 0x123123 ;good return 2 Sleep 10 ; 可选添加,降低空转时的CPU占用 } }
调用侧注意事项
必须正确接收函数返回值,写法参考:
cond := CheckConditionColor() if cond <= 1 { ; 对应你的业务逻辑 } if cond >= 2 { ; 对应你的业务逻辑 }
第二个函数(PixelSearch版本)可选修复
第二个函数的核心问题和第一个一致:PixelSearch执行后只要第一个色值不匹配,ErrorLevel就会变成1,不再等于-1,循环最多执行1次,把循环条件改为while true即可,同样建议在搜索的色值前加0x前缀避免判定偏差。
内容的提问来源于stack exchange,提问作者Glaceon69
相关产品推荐
相关产品推荐

