颜色判断为什么不行?

Post a reply


In an effort to prevent automatic submissions, we require that you complete the following challenge.
Smilies
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :| :mrgreen: :geek: :ugeek: :arrow: :angel: :clap: :crazy: :eh: :lolno: :problem: :shh: :shifty: :sick: :silent: :think: :thumbup: :thumbdown: :salute: :wave: :wtf: :yawn: :facepalm: :bravo: :dance: :beard: :morebeard: :xmas: :HeHe: :trollface: :cookie: :rainbow: :monkeysee: :monkeysay: :happybday: :headwall: :offtopic: :superhappy: :terms: :beer:
View more smilies

BBCode is ON
[img] is OFF
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: 颜色判断为什么不行?

Re: 颜色判断为什么不行?

Post by jsjcjsjc » 05 Oct 2019, 06:11

@tmplinshi
非常感谢您的回复,但是你的代码貌似和我一样的情况,如下
“如果中间变换一次颜色,应该只提示一次颜色有变化,还是会不停的提示颜色有变化? 我的理解是只提示一次,但是实际上变换一次颜色后会不停的提示颜色有变化
因为颜色变换一次后,下面的循环中before和after的颜色是一样的,为什么还会提示颜色有变化呢?”

有点不明白啊

Re: 颜色判断为什么不行?

Post by tmplinshi » 04 Oct 2019, 10:57

不清楚,我测试没有问题。你就运行我那段测试代码试试,单独保存到一个文件中,不要加入其他代码,然后测试窗口就用浏览器打开这个帖子,滚动一下网页颜色就会有变化,不滚动则不会弹出对话框。

Re: 颜色判断为什么不行?

Post by jsjcjsjc » 04 Oct 2019, 08:59

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: 颜色判断为什么不行?

Post by jsjcjsjc » 04 Oct 2019, 07:53

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)
}
太感谢了,我尝试了CoordMode, Pixel, Screen,但是还是不行。。。。
关键我看逻辑没问题啊。第一次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: 颜色判断为什么不行?

Post by tmplinshi » 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)
}

Re: 颜色判断为什么不行?

Post by Guest » 04 Oct 2019, 06:00

tmplinshi wrote:
02 Oct 2019, 10:59
你是发帖的时候替换掉了部分变量名吗?否则的话第一行就会导致脚本出错

这个错误提示是说“变量名 color-before 含有非法字符”。点击【确定】脚本就退出了,不会继续往下执行了。
但是发现另外一个问题,这段代码第一次运行没有问题,等待颜色变化的时候会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: 颜色判断为什么不行?

Post by jsjcjsjc » 03 Oct 2019, 07:58

tmplinshi wrote:
02 Oct 2019, 10:59
你是发帖的时候替换掉了部分变量名吗?否则的话第一行就会导致脚本出错

Image Broken Link for safety

这个错误提示是说“变量名 color-before 含有非法字符”。点击【确定】脚本就退出了,不会继续往下执行了。
感谢,全部改成color_before貌似真的可以了

Re: 颜色判断为什么不行?

Post by tmplinshi » 02 Oct 2019, 10:59

你是发帖的时候替换掉了部分变量名吗?否则的话第一行就会导致脚本出错

Image

这个错误提示是说“变量名 color-before 含有非法字符”。点击【确定】脚本就退出了,不会继续往下执行了。

颜色判断为什么不行?

Post by jsjcjsjc » 02 Oct 2019, 07:59

我的思路是这样的:先获取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

Top