我的思路是这样的:先获取724,310的颜色,按F8执行,然后Gosub到color.每隔一秒PixelGetColor坐标724,310的颜色,如果颜色一样就等待,颜色不一样了就回到主程序
但是测试了一下貌似没有效果啊...求分析
感谢
========================================================
....主程序....
PixelGetColor,color-before,724,310,RGB
Sleep, 200
Send, {F8}
Sleep, 5000
Gosub, color
Sleep, 1000
....主程序....
color:
loop
{
PixelGetColor,color-after,724,310,RGB
if (color-before = color-after)
{
sleep,1000
Continue
; 如果724,310的颜色一样就等1秒
}
else
{
break
; 如果724,310的颜色不一样,就返回主程序
}
}
return
颜色判断为什么不行?
Moderators: tmplinshi, arcticir
Re: 颜色判断为什么不行?
你是发帖的时候替换掉了部分变量名吗?否则的话第一行就会导致脚本出错
这个错误提示是说“变量名 color-before 含有非法字符”。点击【确定】脚本就退出了,不会继续往下执行了。
这个错误提示是说“变量名 color-before 含有非法字符”。点击【确定】脚本就退出了,不会继续往下执行了。
Re: 颜色判断为什么不行?
但是发现另外一个问题,这段代码第一次运行没有问题,等待颜色变化的时候会MsgBox出我要的信息,但是点击确定后,屏幕保持不变会不断跳出MsgBox。。。
这是为什么?
感谢
Code: Select all
loop
{
PixelGetColor,color_before,724,310,RGB
Sleep, 2000
Gosub, color
MsgBox,
(
color_before, %color_before%
color_after, %color_after%
)
}
color:
loop
{
PixelGetColor,color_after,724,310,RGB
if (color_before = color_after)
{
sleep,1000
Continue
}
else
{
break
}
}
return
Re: 颜色判断为什么不行?
可能跟当前激活的窗口有关。默认情况下,PixelGetColor 的 x y 坐标是相对于当前窗口的,可以通过 CoordMode 命令修改成相对于屏幕。
这种情况下可能用函数好一点。
这种情况下可能用函数好一点。
Code: Select all
Loop
{
WaitColorChange(724, 310, color_before, color_after)
MsgBox,
(LTrim
color_before: %color_before%
color_after: %color_after%
)
Sleep, 100
}
WaitColorChange(x, y, ByRef color1 := "", ByRef color2 := "") {
PixelGetColor, color1, x, y, RGB
Loop {
Sleep, 1000
PixelGetColor, color2, x, y, RGB
} Until (color1 != color2)
}
Re: 颜色判断为什么不行?
太感谢了,我尝试了CoordMode, Pixel, Screen,但是还是不行。。。。tmplinshi wrote: ↑04 Oct 2019, 07:09可能跟当前激活的窗口有关。默认情况下,PixelGetColor 的 x y 坐标是相对于当前窗口的,可以通过 CoordMode 命令修改成相对于屏幕。
这种情况下可能用函数好一点。Code: Select all
Loop { WaitColorChange(724, 310, color_before, color_after) MsgBox, (LTrim color_before: %color_before% color_after: %color_after% ) Sleep, 100 } WaitColorChange(x, y, ByRef color1 := "", ByRef color2 := "") { PixelGetColor, color1, x, y, RGB Loop { Sleep, 1000 PixelGetColor, color2, x, y, RGB } Until (color1 != color2) }
关键我看逻辑没问题啊。第一次loop也没有问题,以后的loop不管变没变就一直提示颜色变化。。。
这是代码
Code: Select all
CoordMode, ToolTip, Screen
CoordMode, Pixel, Screen
CoordMode, Mouse, Screen
CoordMode, Caret, Screen
CoordMode, Menu, Screen
loop
{
PixelGetColor,color_before,724,310,RGB
Sleep, 2000
Gosub, color
MsgBox, color_before= %color_before%. color_after= %color_after%
}
color:
{
loop
{
PixelGetColor,color_after,724,310,RGB
if (color_before = color_after)
{
sleep,1000
Continue
}
else
{
break
}
}
}
return
Re: 颜色判断为什么不行?
貌似是我的思路不对,但是想不明白啊tmplinshi wrote: ↑04 Oct 2019, 07:09可能跟当前激活的窗口有关。默认情况下,PixelGetColor 的 x y 坐标是相对于当前窗口的,可以通过 CoordMode 命令修改成相对于屏幕。
这种情况下可能用函数好一点。Code: Select all
Loop { WaitColorChange(724, 310, color_before, color_after) MsgBox, (LTrim color_before: %color_before% color_after: %color_after% ) Sleep, 100 } WaitColorChange(x, y, ByRef color1 := "", ByRef color2 := "") { PixelGetColor, color1, x, y, RGB Loop { Sleep, 1000 PixelGetColor, color2, x, y, RGB } Until (color1 != color2) }
如果中间变换一次颜色,应该只提示一次颜色有变化,还是会不停的提示颜色有变化? 我的理解是只提示一次,但是实际上变换一次颜色后会不停的提示
但是每次不是会重新PixelGetColor一下before的颜色和after的颜色吗?如果变了一次以后PixelGetColor到的before的颜色和after颜色都是一样的,为什么会一直提示
Re: 颜色判断为什么不行?
不清楚,我测试没有问题。你就运行我那段测试代码试试,单独保存到一个文件中,不要加入其他代码,然后测试窗口就用浏览器打开这个帖子,滚动一下网页颜色就会有变化,不滚动则不会弹出对话框。
Re: 颜色判断为什么不行?
@tmplinshi
非常感谢您的回复,但是你的代码貌似和我一样的情况,如下
“如果中间变换一次颜色,应该只提示一次颜色有变化,还是会不停的提示颜色有变化? 我的理解是只提示一次,但是实际上变换一次颜色后会不停的提示颜色有变化
因为颜色变换一次后,下面的循环中before和after的颜色是一样的,为什么还会提示颜色有变化呢?”
有点不明白啊
非常感谢您的回复,但是你的代码貌似和我一样的情况,如下
“如果中间变换一次颜色,应该只提示一次颜色有变化,还是会不停的提示颜色有变化? 我的理解是只提示一次,但是实际上变换一次颜色后会不停的提示颜色有变化
因为颜色变换一次后,下面的循环中before和after的颜色是一样的,为什么还会提示颜色有变化呢?”
有点不明白啊
Who is online
Users browsing this forum: No registered users and 23 guests