Что нового

Посчитать количество кликов на определенном цвете

n0kk

Новичок
Сообщения
22
Репутация
0
Доброго времени суток, написал тут один скрипт, мышка ищет определенный цвет и если находит щелкает по нему, так вот хотел дописать что бы набиралось 40 щелчков и скрипт завершал работу, но что то я не так дописал, в итоге не работает, помогите разобраться, буду очень признателен
Код:
$blue = 0
Func _FuncClick()
MouseMove(1045, 180)
$ColorPx = PixelGetColor(1045, 180)
If $ColorPx = 6850733 Then
   $blue += 1
   If $blue = 40 Then
	  Exit
	  ElseIf $blue < 40 Then
   MouseClick("middle", 697, 180)
   MouseClick("left", 292, 14, 1)
   MouseClick("middle", 750, 240, 1, 80)
   MouseClick("left", 492, 15, 1)
   Sleep(35000)
   MouseClick("left", 802, 187, 1, 60)
   Send("^w")
   Send("^w")
   MouseClick("left", 1045, 180,1, 30)
   MouseMove(1045, 190)
   Return $blue
   EndIf
ElseIf $ColorPx <> 6850733 Then
   MouseMove(1045, 190)
EndIf


$ColorPx = PixelGetColor(1045, 190)
If $ColorPx = 6850733 Then
   $blue += 1
   If $blue = 40 Then
	  Exit
	  ElseIf $blue < 40 Then
   MouseClick("middle", 697, 190)
   MouseClick("left", 292, 14, 1)
   MouseClick("middle", 750, 240, 1, 80)
   MouseClick("left", 492, 15, 1)
   Sleep(27000)
   MouseClick("left", 802, 187, 1, 60)
   Send("^w")
   Send("^w")
   MouseClick("left", 1045, 190,1, 30)
   MouseMove(1045, 200)
   Return $blue
   EndIf
ElseIf $ColorPx <> 6850733 Then
   MouseMove(1045, 200)
EndIf


$ColorPx = PixelGetColor(1045, 200)
If $ColorPx = 6850733 Then
   $blue += 1
   If $blue = 40 Then
	  Exit
	  ElseIf $blue < 40 Then
   MouseClick("middle", 697, 190)
   MouseClick("left", 292, 14, 1)
   MouseClick("middle", 750, 240, 1, 80)
   MouseClick("left", 492, 15, 1)
   Sleep(48000)
   MouseClick("left", 802, 187, 1, 60)
   Send("^w")
   Send("^w")
   MouseClick("left", 1045, 200,1, 30)
   MouseMove(1045, 210)
   Return $blue
   EndIf
ElseIf $ColorPx <> 6850733 Then
   MouseMove(1045, 210)
EndIf
EndFunc

For $i = 0 To 500
    _FuncClick()
 Next
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
А так ?
Код:
Global $blue = 0
Func _FuncClick()
	MouseMove(1045, 180)
	$ColorPx = PixelGetColor(1045, 180)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 180)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(35000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 180, 1, 30)
			MouseMove(1045, 190)
			Return $blue
		EndIf
	Else
		MouseMove(1045, 190)
	EndIf


	$ColorPx = PixelGetColor(1045, 190)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 190)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(27000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 190, 1, 30)
			MouseMove(1045, 200)
			Return $blue
		EndIf
	Else
		MouseMove(1045, 200)
	EndIf


	$ColorPx = PixelGetColor(1045, 200)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 190)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(48000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 200, 1, 30)
			MouseMove(1045, 210)
			Return $blue
		EndIf
	Else
		MouseMove(1045, 210)
	EndIf
EndFunc   ;==>_FuncClick

For $i = 0 To 500
	_FuncClick()
Next
Функцию можно сократить втрое, например так :
Код:
Global $blue = 0
Func _FuncClick($x,$y)
	MouseMove($x, $y)
	$ColorPx = PixelGetColor($x, $y)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 180)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(35000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 180, 1, 30)
			MouseMove($x, $y+10)
			Return $blue
		EndIf
	Else
		MouseMove($x, $y+10)
	EndIf
EndFunc   ;==>_FuncClick

For $i = 0 To 500
	For $j=0 to 2
	  _FuncClick(1045,180+$j*10)
	Next	
Next
 
Автор
N

n0kk

Новичок
Сообщения
22
Репутация
0
ra4o сказал(а):
А так ?
Код:
Global $blue = 0
Func _FuncClick()
	MouseMove(1045, 180)
	$ColorPx = PixelGetColor(1045, 180)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 180)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(35000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 180, 1, 30)
			MouseMove(1045, 190)
			Return $blue
		EndIf
	Else
		MouseMove(1045, 190)
	EndIf


	$ColorPx = PixelGetColor(1045, 190)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 190)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(27000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 190, 1, 30)
			MouseMove(1045, 200)
			Return $blue
		EndIf
	Else
		MouseMove(1045, 200)
	EndIf


	$ColorPx = PixelGetColor(1045, 200)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 190)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(48000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 200, 1, 30)
			MouseMove(1045, 210)
			Return $blue
		EndIf
	Else
		MouseMove(1045, 210)
	EndIf
EndFunc   ;==>_FuncClick

For $i = 0 To 500
	_FuncClick()
Next
Функцию можно сократить втрое, например так :
Код:
Global $blue = 0
Func _FuncClick($x,$y)
	MouseMove($x, $y)
	$ColorPx = PixelGetColor($x, $y)
	If $ColorPx = 6850733 Then
		$blue += 1
		If $blue = 40 Then
			Exit
		Else
			MouseClick("middle", 697, 180)
			MouseClick("left", 292, 14, 1)
			MouseClick("middle", 750, 240, 1, 80)
			MouseClick("left", 492, 15, 1)
			Sleep(35000)
			MouseClick("left", 802, 187, 1, 60)
			Send("^w")
			Send("^w")
			MouseClick("left", 1045, 180, 1, 30)
			MouseMove($x, $y+10)
			Return $blue
		EndIf
	Else
		MouseMove($x, $y+10)
	EndIf
EndFunc   ;==>_FuncClick

For $i = 0 To 500
	For $j=0 to 2
	  _FuncClick(1045,180+$j*10)
	Next	
Next

Если изменить условие и поставить Else то скрипт не правильно работает, сделал как в начале было, просто нужно объявить переменную global, так все заработало


Добавлено:
Сообщение автоматически объединено:

По поводу сокращения кода, мне не совсем понятно, так как я новичок, ясно что мы каждый шаг поиска цвета, добавляем 10px, ну там sleep должен быть всегда разный как находит цвет, и не ясно откуда у вас переменная j взялась, а вообще спасибо за помощь
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
n0kk

Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
не ясно откуда у вас переменная j взялась
Я увидел, что у Вас три блока с одинаковыми действиями, разница только в некоторых переменных, по-этому я этот блок вынес в отдельную функцию и переменные, которые могут изменяться передаю в функцию в качестве аргументов . Так как Вы эти действия выполняете три раза , отсюда и цикл "J" от "0" до"2" (выполняется три раза).
 
Верх