这个是我自己用的 屏幕坐标点颜色判断函数
他是用 v1 版的 可变参数函数 实现的。
中间包涵 PixelGetColor PixelSearch 的多点,多范围,多颜色的各种逻辑的判断。
函数注释中,举例了各种用法。
也不知道论坛中有没有人发过,欢迎大佬们指点~
Code: Select all
IfColors(Params*) {
/*------------------------------------------------
判断颜色 1.1
作者: Ghost_jack_00
返回值: 0-false 1-true
示例用法 1.0版本
1、ifColors("100,200,0xFFFFFF")
=> PixelGetColor, pc, 100,200,RGB
=> InStr(0xFFFFFF,pc)
单点判断单颜色真假
2、ifColors("100,200,0xFFFFFF|0x00000")
=> PixelGetColor, pc, 100,200,RGB
=> InStr(0xFFFFFF|0x00000,pc)
单点判断多颜色真假,颜色分隔符不能是逗号
3、ifColors("100,200,0xFFFFFF","300,400,0x000000")
多点判断多颜色同时成立的真假,多点用引号分开
4、ifColors("100,200,0xFFFFFF,or","300,400,0x000000")
多点判断多颜色任一成立的真假, 第4参数为or ||,默认不设置为 and
5、ifColors("100,200,0xFFFFFF|0x000000,||","300,400,0x000000","500,600,0x888888")
a => ifColors("100,200,0xFFFFFF|0x000000")
b => ifColors("300,400,0x000000")
c => ifColors("500,600,0x888888")
复杂逻辑的组合:解释从左往右, (a or b)and c
示例用法 1.1版本
兼容1.0,区分为 坐标数字,是否存在 ~|-_ 分隔符
1、ifColors("100~200,300,0xFFFFFF")
=> PixelSearch,X, Y, 100, 300, 200, 300, 0xFFFFFF, 0 , Fast RGB
范围判断单颜色真假
2、ifColors("100,300~200,0xFFFFFF|0x000000")
a=> PixelSearch,X, Y, 100, 300, 100, 200, 0xFFFFFF, 0 , Fast RGB
b=> PixelSearch,X, Y, 100, 300, 100, 200, 0x000000, 0 , Fast RGB
a or b
判断范围,是否存在多颜色中的任意一个颜色 ,颜色分隔符不能是逗号
3、ifColors("100~200,300~400,0xFFFFFF","300,400,0x000000")
a=> PixelSearch,X, Y, 100, 300, 200, 400, 0xFFFFFF, 0 , Fast RGB
b=> ifColors("300,400,0x000000")
a and b
范围判断+ 单点判断,同时成立
4、ifColors("100~200,300~400,0xFFFFFF,or","300,400,0x000000")
a=> PixelSearch,X, Y, 100, 300, 200, 400, 0xFFFFFF, 0 , Fast RGB
b=> ifColors("300,400,0x000000")
a or b
范围判断 + 单点判断,任一成立 (第4参数为or ||,默认不设置为 and)
5、ifColors("100~200,200,0xFFFFFF|0x000000,||","300,400,0x000000","500~600,700,0x888888")
a=> PixelSearch,X, Y, 100, 200, 100, 300, 0xFFFFFF, 0 , Fast RGB
PixelSearch,X, Y, 100, 200, 100, 300, 0x000000, 0 , Fast RGB
b=> ifColors("300,400,0x000000")
c=> PixelSearch,X, Y, 500, 700, 600, 700, 0xFFFFFF, 0 , Fast RGB
复杂逻辑的组合:解释从左往右, (a or b)and c
*/ ;--------------------------------------------
for index,param in params
{
xyc:= StrSplit(StrReplace(param, A_Space),","),x:=xyc[1],y:=xyc[2],cs:=xyc[3]
a_o:=InStr("or||",xyc[4]=""?"&":xyc[4])
if RegExMatch(x . y , "([-~|&_]+)", R)
{
x_c := StrSplit(x,R),x1:=x_c[1],x2:=x_c[2]=""?x1:x_c[2]
y_c := StrSplit(y,R),y1:=y_c[1],y2:=y_c[2]=""?y1:y_c[2]
Loop, Parse, cs, -~|&_
{
PixelSearch,OutX, OutY, %x1%, %y1%, %x2%, %y2%,%A_LoopField%, 0 , Fast RGB
IF t_f:=!ErrorLevel
break
}
} else {
PixelGetColor, pc, x,y,RGB
t_f:= InStr(cs,pc)
}
if !t_f and !a_o
return false
if t_f and a_o
return true
}
return t_f?true:false
}