Что нового

[Мышь, клавиатура] Функции по пикселю

Goldenx

Новичок
Сообщения
14
Репутация
0
Всем привет, недавно начал изучать AutoIt. Вроде бы все нормально, но совершенно не получается одна функция, а тоесть; У нас есть пиксель скажем красного цвета в координатах x, y. Если он действительно там есть, но выполняется дествие А, если нету то действие Б. Вроде бы все довольно легко...
Пробовал примерно так:

Код:
PixelSearch ( 350, 243, 351, 244, 0xF0F4F9, 3)
		If Not @error Then
			Exit	
		Else
	MouseMove ( 41, 270 )
	MouseClick ( "left" )
		EndIf


И так:

Код:
If PixelGetColor ( 350, 243 ) = 120000 Then
Exit
Else
		MouseMove ( 43, 317 )
		MouseClick ( "left", 43, 317, 1 )
EndIf


Но ничего не получается, просто автоматом переводит и жмется на координаты, несмотря на пиксель
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Не понимаю зачем поиск пикселя, если известна координата.
Если так
Код:
$var=PixelGetColor(350, 351)
If $var = 0xF0F4F9 Then
   MouseMove ( 41, 270 )
   MouseClick ( "left" )
Else
Exit
Endif


Чтобы определить координаты и цвет пикселя можно воспользоваться этим
Код:
MsgBox(0,"","Наведите мышкой и нажмите Enter")
$x1=MouseGetPos(0)
$y1=MouseGetPos(1)
$var=PixelGetColor($x1,$y1)
MsgBox(0,"",$x1 & ", " & $y1 & ", " & $var)
 
Автор
G

Goldenx

Новичок
Сообщения
14
Репутация
0
ildar,

Спасибо, заработало. :smile:

Еще один вопрос; Функция с определением цвета работает, но как сделать примерно такую проверку: Если х1, y1 нужного цвета, то проверяется х2, y2, если и оно нужного цвета то проверяется x3, y3 и тд.

Код:
$var=PixelGetColor(341, 236)
		$var2=PixelGetColor(32, 260)
		$var3=PixelGetColor(30, 304)
	If $var = 4456967 Then
		If $var2 = 11832934 Then
			If $var3 = 11832934 Then
				MouseMove ( 34, 352 )
				MouseClick ( "left" )
			Else
				MouseMove ( 34, 306 )
				MouseClick ( "left" )
		Else
				MouseMove ( 34, 268 )
				MouseClick ( "left" )
			Endif
		Endif
	Endif


Снова делаю что-то не так..
 

agikon

Знающий
Сообщения
789
Репутация
17
Код:
$var=PixelGetColor(341, 236)
$var2=PixelGetColor(32, 260)
$var3=PixelGetColor(30, 304)
    If $var = 4456967 Then
		MouseMove ( 34, 268 )
        MouseClick ( "left" ) 
			If $var2 = 11832934 Then
				MouseMove ( 34, 306 )
				MouseClick ( "left" )
					If $var3 = 11832934 Then
						MouseMove ( 34, 352 )
						MouseClick ( "left" )
					Else
					endif	
			Else
			Endif		
	else  
    Endif
 
Автор
G

Goldenx

Новичок
Сообщения
14
Репутация
0
Спасибо, я пошел немного изощренным путем, а точнее

Код:
$var=PixelGetColor(341, 236)
		$var2=PixelGetColor(32, 260)
		$var3=PixelGetColor(30, 304)
	If $var = 4456967 Then
		$v = 1
	Else
		$v = 0
	EndIf

	If $var2 = 11832934 Then
		$vv = 1
	Else
		$vv = 0
	EndIf

	If $var3 = 11832934 Then
		$vvv = 1
	Else
		$vvv = 0
	EndIf

	If $v = 1 And $vv = 0 And $vvv = 0 Then
		MouseMove ( 34, 268 )
		MouseClick ( "left" )
	EndIf

	If $v = 1 And $vv = 1 And $vvv = 0 Then
		MouseMove ( 34, 306 )
		MouseClick ( "left" )
	EndIf

	If $v = 1 And $vv = 0 And $vvv = 1 Then
		MouseMove ( 34, 352 )
		MouseClick ( "left" )
	EndIf


И последний вопрос, этот код у меня скажем в функции Func PixelDav () , можно чтобы эта функция не применялась ежесекундно если нужнэ пикселя найдутся, а скажем раз в 20 секунд ? Все обыскал, не нашел ничего подобного :-X

Sleep не подойдет, так как он останавливает весь скрипт
 

agikon

Знающий
Сообщения
789
Репутация
17
в таких случаях используется функция AdlibRegister()

Код:
AdlibRegister('PixelDav', 20000) ; 20 секунд

func PixelDav()
		$var=PixelGetColor(341, 236)
        $var2=PixelGetColor(32, 260)
        $var3=PixelGetColor(30, 304)
    If $var = 4456967 Then
        $v = 1
    Else
        $v = 0
    EndIf

    If $var2 = 11832934 Then
        $vv = 1
    Else
        $vv = 0
    EndIf

    If $var3 = 11832934 Then
        $vvv = 1
    Else
        $vvv = 0
    EndIf

    If $v = 1 And $vv = 0 And $vvv = 0 Then
        MouseMove ( 34, 268 )
        MouseClick ( "left" )
    EndIf

    If $v = 1 And $vv = 1 And $vvv = 0 Then
        MouseMove ( 34, 306 )
        MouseClick ( "left" )
    EndIf

    If $v = 1 And $vv = 0 And $vvv = 1 Then
        MouseMove ( 34, 352 )
        MouseClick ( "left" )
    EndIf
	
endfunc
 
Верх