Что нового

Нажатие на цвет пикселя который расположен ближе к центру

Fantom

Новичок
Сообщения
3
Репутация
0
Суть в том чтобы со сканировать экран на нужный пиксель, определить какой находится ближе к центру, сканируемой области (возможно координаты), и кликать на нем, пока он не пропадет, далее перейти к следующей зоне.
В силу своих знаний языка, я пришел к такому решению: разделить диапазон сканирования на семь областей, с последовательностью определения пикселя сначала в 1(мнимый цент), 2, 3, 4, 5, 6, 7 примерно так:
ххххххххх 6
xxxxxxxxx 4
xxxxxxxxx 2
xxxxxxxxx 1
xxxxxxxxx 3
xxxxxxxxx 5
xxxxxxxxx 7
К сожалению мой скрипт работает до определения первого пикселя и нажатии на него в любой области, следующий пиксель уже не определяется скрипт выдает ошибку.
Данная ошибка вышла при скане пикселя в 6 области, если бы пиксель был обнаружен в 1 области то вышла ошибка с $cord2.
Код:
if not @error Then MouseClick("left", $cord7[0], $cord7[1], 1, 1)
if not @error Then MouseClick("left", $cord7^ ERROR

Просьба строго не судить) Может кто подскажет в чем моя ошибка или предложит другой способ.
Сам скрипт:
Код:
While 1
$cord1 = PixelSearch(198, 411, 1477, 643, 0x7C6AB0, 10)
If Not @error Then MouseClick("left", $cord1[0], $cord1[1], 1, 1)
	if @error Then $cord2 = PixelSearch(198, 295, 1477, 411, 0x7C6AB0, 10)
		if Not @error Then MouseClick("left", $cord2[0], $cord2[1], 1, 1)
			if @error Then $cord3 = PixelSearch(198, 643, 1477, 759, 0x7C6AB0, 10)
				if Not @error Then MouseClick("left", $cord3[0], $cord3[1], 1, 1)
					if @error Then $cord4 = PixelSearch(198, 179, 1477, 295, 0x7C6AB0, 10)
						if Not @error Then MouseClick("left", $cord4[0], $cord4[1], 1, 1)
							if @error Then $cord5 = PixelSearch(198, 759, 1477, 875, 0x7C6AB0, 10)
								if not @error Then MouseClick("left", $cord5[0], $cord5[1], 1, 1)
									if @error Then $cord6 = PixelSearch(198, 63, 1477, 179, 0x7C6AB0, 10)
										if not @error Then MouseClick("left", $cord6[0], $cord6[1], 1, 1)
											if @error Then $cord7 = PixelSearch(198, 875, 1477, 967, 0x7C6AB0, 10)
												if not @error Then MouseClick("left", $cord7[0], $cord7[1], 1, 1)
sleep(400)	
WEnd
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
OffTopic:
:shok: :wacko: :blink:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Fantom
Попробуйте так:
Код:
HotKeySet("{ESC}", "_Exit")

Dim $aX[7] = [411, 295, 643, 179, 759, 63, 875]
Dim $aY[7] = [643, 411, 759, 295, 875, 179, 967]
While 1
	For $i = 0 To 6
		$cord = PixelSearch(198, $aX[$i], 1477, $aY[$i], 0x7C6AB0, 10)
		If Not @error Then
			MouseClick("left", $cord[0], $cord[1], 1, 1)
			Sleep(1000)
			;ExitLoop
		EndIf
	Next
	Sleep(1000)
WEnd
Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
F

Fantom

Новичок
Сообщения
3
Репутация
0
madmasles сказал(а):
Fantom
Попробуйте так:
Код:
HotKeySet("{ESC}", "_Exit")

Dim $aX[7] = [411, 295, 643, 179, 759, 63, 875]
Dim $aY[7] = [643, 411, 759, 295, 875, 179, 967]
While 1
	For $i = 0 To 6
		$cord = PixelSearch(198, $aX[$i], 1477, $aY[$i], 0x7C6AB0, 10)
		If Not @error Then
			MouseClick("left", $cord[0], $cord[1], 1, 1)
			Sleep(1000)
			;ExitLoop
		EndIf
	Next
	Sleep(1000)
WEnd
Func _Exit()
	Exit
EndFunc   ;==>_Exit
Спасибо, это значительно упрощает, но я чего так наворотил, хотел чтобы клики продолжались пока пиксель не пропадет в области, то есть пока нет ошибки он не переходит к скану следующей.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Fantom
Может быть так?
Код:
HotKeySet("{ESC}", "_Exit")

Dim $aX[7] = [411, 295, 643, 179, 759, 63, 875]
Dim $aY[7] = [643, 411, 759, 295, 875, 179, 967]
While 1
	For $i = 0 To 6
		$t = 0
		While 1
			$cord = PixelSearch(198, $aX[$i], 1477, $aY[$i], 0x7C6AB0, 10)
			If Not @error Then
				MouseClick("left", $cord[0], $cord[1], 1, 1)
				$t += 1
				ToolTip($i & @CRLF & $t)
				Sleep(4000)
			Else
				ExitLoop
			EndIf
		WEnd
	Next
	Sleep(4000)
WEnd
Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Fantom [?]
разделить диапазон сканирования ...
Попробуйте так получать диапазоны:
Код:
Opt("MouseCoordMode", 2)

HotKeySet("{ESC}", "_Exit")

While 1
	$ii = 0
	While 1
		$ii += 50
		$aClientSize = WinGetClientSize("[Class:SciTEWindow]")
		$k = $aClientSize[1] / $aClientSize[0]
		$iii = $ii * $k
		$x = $aClientSize[0] / 2 - $ii
		$y = $aClientSize[1] / 2 - $iii
		If $x <= 0 Or $y <= 0 Then
			ExitLoop
		EndIf
		MouseMove($x, $y)
		Sleep(1000)
		MouseMove($x + $ii * 2, $y)
		Sleep(1000)
		MouseMove($x + $ii * 2, $y + $iii * 2)
		Sleep(1000)
		MouseMove($x, $y + $iii * 2)
		Sleep(1000)
	WEnd
	Sleep(1000)
WEnd

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
F

Fantom

Новичок
Сообщения
3
Репутация
0
К сожалению ничего не выходит, кликает все равно по старшему слева в верху, не дождавшись исчезновения ближнего к центру.
Код:
HotKeySet("{ESC}", "_Exit") ;выход
Global $Paused
HotKeySet("{Pause}", "TogglePause") ;пауза


Func TogglePause()                
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip("Script is Paused")     ;сообщение на курсоре при нажатии пазы 
WEnd
ToolTip("")                          ;при нажатии для снятия 
EndFunc
Func _Exit()
    Exit
EndFunc   ;==>_Exit

MsgBox(262145, "Click on mid", "go")
Dim $aX1[6] = [762, 701, 575, 449, 323, 197]          ;координаты прямоугольников от центара
Dim $aY1[6] = [464, 391, 309, 227, 145, 63]
Dim $aX2[6] = [904, 973, 1099, 1225, 1351, 1477]
Dim $aY2[6] = [568, 639, 721, 803, 885, 967]
While 1
For $i = 0 To 5
	While 1
	$cord = PixelSearch($aX1[$i], $aY1[$i], $aX2[$i], $aY2[$i], 0x7C6AB0, 10)
		If @error = 1 Then ExitLoop (1)                ;прервать while 1(2)
			MouseClick("left", $cord[0], $cord[1], 1, 1) ;клик если нет ошибки
				Sleep(350)
			WEnd
		Next                   ;следующая $i
		WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Fantom
Я пробовал на Excel, периодически делая заливку красным цветом разных ячеек. У меня работает так:
Код:
Global $Paused
Opt("MouseCoordMode", 2)

HotKeySet("{ESC}", "_Exit")
HotKeySet("{TAB}", "TogglePause")
$i = 0

While 1
	$ii = 0
	$t = 0
	While 1
		$t = 0
		$i += 1
		$ii += 50
		$aClientSize = WinGetClientSize("[Class:XLMAIN]")
		$k = $aClientSize[1] / $aClientSize[0]
		$iii = $ii * $k
		$x = $aClientSize[0] / 2 - $ii
		$y = $aClientSize[1] / 2 - $iii
		If $x <= 0 Or $y <= 0 Then
			ExitLoop
		EndIf
		While 1
			MouseMove($x, $y)
			Sleep(1000)
			MouseMove($x + $ii * 2, $y)
			Sleep(1000)
			MouseMove($x + $ii * 2, $y + $iii * 2)
			Sleep(1000)
			MouseMove($x, $y + $iii * 2)
			Sleep(1000)
			$cord = PixelSearch($x, $y, $x + $ii * 2, $y + $iii * 2, 0xFF0000, 10)
			If Not @error Then
				MouseClick("left", $cord[0], $cord[1], 1, 1)
				$t += 1
				ToolTip($i & @CRLF & $t)
				Sleep(2000)
			Else
				ExitLoop
			EndIf
		WEnd
	WEnd
	Sleep(1000)
WEnd

Func TogglePause()
	$Paused = Not $Paused
	While $Paused
		Sleep(100)
	WEnd
EndFunc   ;==>TogglePause

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Верх