我需要检测一个目标程序的一个颜色点的值,当这个值为我指定的值时,执行一次某方法。但这个点的颜色会保持很久,而且我还需要循环检测
比如:
private void timer1_Tick(object sender, EventArgs e)
{
Clorer = GetPixelColor(165, 23);
if (clorer==3355443)
{
MessageBox.Show("出现指定值!");
}
}
这种情况,这个点的值只要不变,就会一直弹消息框。如果我把Timer停止了,又无法继续检测这个点的值了。
如何才能满足条件时,只执行一次,并且,继续检测这个点的值,下次出现时,再执行一次。
只要能一直检测并只执行一次,不用Timer也行。
希望大神们能看明白。
int preclorer = 0;
private void timer1_Tick(object sender, EventArgs e)
{
clorer = GetPixelColor(165, 23);
if (clorer==3355443 && preclorer != clorer)
{
MessageBox.Show("出现指定值!");
preclorer = clorer;
}
}
这样的话,第一次应该是可行的,因为preclorer != clorer,下次 检测时,preclorer = clorer,就不满足条件了,不会再执行了。
题目的需求可以归纳如下:
当 连续 检测到期望值,只弹出一次对话框。
那么关键就是如何判断 连续
可以用如下代码:
int i = 1;
int j = -1;
private void timer1_Tick(object sender, EventArgs e)
{
Clorer = GetPixelColor(165, 23);
i = i + 1;
if (clorer == 3355443 && (i - j) != 1)
{
MessageBox.Show("出现指定值!");
j = i;
}
}
当 i-j 等于 1 时,就认定是 连续。
int isMsgPopUp = 0;
private void timer1_Tick(object sender, EventArgs e)
{
clorer = GetPixelColor(165, 23);
if (clorer==3355443 && isMsgPopUp==0)
{
MessageBox.Show("出现指定值!");
isMsgPopUp= 1;
}
else
isMsgPopUp=0;
}
加个开关。MessageBox.Show方法会阻塞当前线程,只要不点,开关就是true 状态。
bool dialog = false;
private void timer1_Tick(object sender, EventArgs e)
{
clorer = GetPixelColor(165, 23);
if (clorer==3355443 && !dialog)
{
dialog = true;
MessageBox.Show("出现指定值!");
dialog = false;
}
}
if (clorer==3355443 )
{
if global=0 {
MessageBox.Show("出现指定值!");
global=1;
}
}
else
{
global=0;
}
int a=0; //定义一个变量,表示“符合条件”出现了。
private void timer1_Tick(object sender, EventArgs e)
{
Clorer = GetPixelColor(165, 23);
if (clorer==3355443&&a==0)
{
a++;
MessageBox.Show("出现指定值!");
}
else
{
if(clorer!=3355443)
{
a=0;
}
}
}
不知是否是你所要