Что нового

Исключить квадрат из области поиска pixelsearch

antidog

Новичок
Сообщения
26
Репутация
2
Код:
HotKeySet ("{F6}" , "_Exit")


While 1
	MouseMove (598, 145, 0)
	Sleep (200)
	$color = PixelGetColor ( 595, 316 )
	Sleep (200)
	$searh = PixelSearch (374, 159, 810, 579 , $color )
	If IsArray ($searh) = true Then
		MouseMove ($searh [0], $searh [1])
	MouseClick ("left")
	Sleep (100)
	
	EndIf
WEnd

Func _Exit ()
	Exit
	EndFunc


Нужно чтоб скрипт не искал нужный пиксель в этой области (545,317,643,405), возможно реализовать?
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
В голову приходит вариант использовать четыре PixelSearch и искать пиксель вокруг "запретной" зоны.

Но я бы просто заблокировал перемещение курсора в "запретную" зону.
Код:
HotKeySet ("{F6}" , "_Exit")


While 1
    MouseMove (598, 145, 0)
    Sleep (200)
    $color = PixelGetColor ( 595, 316 )
    Sleep (200)
    $searh = PixelSearch (374, 159, 810, 579 , $color )
    If IsArray ($searh) = true Then

                ; Если пиксель найден в запретной зоне - заблокировать курсор
		If $searh[0]<545 And $searh[1]<317 And $searh[0]>643 And $searh[1]>405 Then
			MouseClick ("left",$searh[0], $searh[1],1)
		EndIf

    Sleep (100)

    EndIf
WEnd

Func _Exit ()
    Exit
    EndFunc
 
Автор
A

antidog

Новичок
Сообщения
26
Репутация
2
4 pixelsearch наверно долго будет?
А вариант с блокировкой курсора не решает проблемы : все нужные пиксели, находящиеся после "блокированной зоны" останутся не найдеными ;) . Запрещённый квадрат в центре находится, так что больше пол-экрана вообще скрипту будут недоступны
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
я тоже в свое время задавался такой проблемой, но мне помогло это обойти PoxelSearchEx, глянь, может поможет
 
Автор
A

antidog

Новичок
Сообщения
26
Репутация
2
смотрел, но не вкурил как его использовать для моего скрипта :D
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
все гениальное просто... там как раз так... код абсолютно универсален, я использую его для проверки нескольких пикселей, оч удобно и быстро (по крайней мере у меня очень быстро)), как ни странно
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Код:
HotKeySet ("{F6}" , "_Exit")

;Координаты всей области посика.
$x = 374
$y = 159
$x2 = 810
$y2 = 579

;Координаты квадрата, который должен игнорироваться в области поиска.
$igX = 500 ;Эти значения ставите сами.
$igY = 300
$igX2 = 600
$igY2 = 400

While 1	
	MouseMove (598, 145, 0)
    Sleep (200)
    $color = PixelGetColor ( 595, 316 )
    Sleep (200)
	For $iy = $y To $y2
		For $ix = $x To $x2
			If ($ix >= $igX And $ix <= $igX2) And ($iy >= $igY And $iy <= $igY2) Then
				ContinueLoop
			Else
				$color2 = PixelGetColor($ix, $iy)
				If $color = $color2 Then
					MouseMove($ix, $iy)
					MouseClick ("left")
					Sleep (100)
				EndIf
			EndIf
		Next
	Next
WEnd

Func _Exit ()
    Exit
EndFunc


Если я ни где не опечатался, то должно работать.
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Kalisnik сказал(а):
Если я ни где не опечатался, то должно работать.
Скорость у такого поиска будет маленькая. у меня без всех Sleep и Mouse минимум 3сек
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
rusreg79 [?]
Скорость у такого поиска будет маленькая. у меня без всех Sleep и Mouse минимум 3сек

Скорее всего у Вас Windows 7. Причиной замедления скорости является включенное Aero. Я уже точно не помню что там надо отключить (какую-то одну опцию в настройках, при этом пропадает прозрачность окон Windows) и все начинает летать. ;)

P.S. Кстати, так наверно будет грамотнее. :smile:
P.P.S. Еще чуть-чуть изменил код.
Код:
HotKeySet ("{F6}" , "_Exit")

;Координаты всей области посика.
;$x = 374
;$y = 159
;$x2 = 810
;$y2 = 579

;Координаты квадрата, который должен игнорироваться в области поиска.
;$igX = 500 ;Эти значения ставите сами.
;$igY = 300
;$igX2 = 600
;$igY2 = 400

While 1	
	MouseMove (598, 145, 0)
    Sleep (200)
    $color = PixelGetColor ( 595, 316 )
    Sleep (200)
	$arr = _PixelSearchAlt(347, 159, 810, 579, 500, 300, 600, 400, $color)
	If IsArray($arr) Then
		MouseMove($arr[0], $arr[1])
		MouseClick ("left")
		Sleep (100)
	EndIf
WEnd

Func _PixelSearchAlt($x, $y, $x2, $y2, $igX, $igY, $igX2, $igY2, $color3)
	Local $arr[2], $color2
	For $iy = $y To $y2
		For $ix = $x To $x2
			If ($ix >= $igX And $ix <= $igX2) And ($iy >= $igY And $iy <= $igY2) Then
				ContinueLoop
			Else
				$color2 = PixelGetColor($ix, $iy)
				If $color2 = $color3 Then
					$arr[0] = $ix
					$arr[1] = $iy
					Return $arr
				EndIf
			EndIf
		Next
	Next
EndFunc

Func _Exit ()
    Exit
EndFunc
 

rusreg79

Продвинутый
Сообщения
159
Репутация
57
Kalisnik сказал(а):
rusreg79 [?]
Скорость у такого поиска будет маленькая. у меня без всех Sleep и Mouse минимум 3сек

Скорее всего у Вас Windows 7. Причиной замедления скорости является включенное Aero. Я уже точно не помню что там надо отключить (какую-то одну опцию в настройках, при этом пропадает прозрачность окон Windows) и все начинает летать. ;)
Про Aero известно,оформление стоит ниже некуда. Поиск на PixelGetColor тоже пытался когда-то делать но скорости нет там.
На PixelSearchEx выбор остановился.
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
rusreg79 [?]
Поиск на PixelGetColor тоже пытался когда-то делать но скорости нет там.

Сделал через PixelGetColor скан экрана на Win XP (1022 х 720) и вправду медленно - 9 сек.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Может это подойдет...
 
Верх