AutoIT błędnie odczytywane kolory

0

Witam! Mój program ma problem z odczytaniem koloru. Identyfikuje go kilku kilkukrotnie ale i tak nie może dać rady. Nie wiem czy wynika to z kody.

Mój kod:
While 1

MouseMove (759, 379)

if PixelGetColor (759, 379) = 0xF5F5F5 Then
Sleep (15000)
EndIf

if PixelGetColor (689, 502) = 0xC9302C Then
MouseMove (353, 611)
MouseClick ("left")
MouseMove (404, 614)
MouseClick ("left")
MouseMove (497, 735)
MouseClick ("left")
Sleep (15000)
EndIf

if PixelGetColor (689, 502) = 0x444444 Then
MouseMove (659, 612)
MouseClick ("left")
MouseMove (497, 735)
MouseClick ("left")
Sleep (15000)
EndIf

if PixelGetColor (689, 502) = 0x449D44 Then
MouseMove (659, 612)
MouseClick ("left")
MouseMove (497, 735)
MouseClick ("left")
Sleep (15000)
EndIf

MouseMove (759, 379)
if PixelGetColor (759, 379) = 0xF5F5F5 Then
Sleep (15000)
EndIf

WEnd

PS: Dodam, że korzystam z tego programu od 2 dni.
*

0

Ustaw myszkę kilka pixeli obok tego miejsca wywołania funkcji.

0
Pijany Kaczor napisał(a):

Ustaw myszkę kilka pixeli obok tego miejsca wywołania funkcji.

Niestety bez zmian.

Mam jeszcze pytanie. Czy program przeczytają 1 wers If, i po stwierdzeniu że ten If nie spełnia warunków to dalej wykonuje polecenia z tego if. Czy po prostu przenosi się do kolejnego if, pomijając tam ten if.

0

A z czym dokładnie jest problem? Może byś spróbował funkcji PixelSearch?

0

Sorry, zapomniałem wspomnieć, że powinieneś zrobić sprawdzanie pozycji myszki w pętli i dopiero wtedy gdy będzie ona na odpowiedniej pozycji, przechodzi dalej.

0

Pseudo kod:

 
Ustawianie myszki
Pętla:
   sprawdzanie pozycji myszki
   sprawdzanie jaki kolor znajduje się w miejscu myszki
   if aktualny-kolor == XX i pozycja myszki == XX:
      -- KOD --
   if aktualny-kolor == YY i pozycja myszki == YY:
      -- KOD --

Ale nie wiem czy przypadkiem nie powinno się założyć haka na okno z którego chce się pobrać kolor.

0
Mały Orzeł napisał(a):

A z czym dokładnie jest problem? Może byś spróbował funkcji PixelSearch?

Problem polega na tym, że przez określony czas program poprawnie odczytuje kolory a po dłuższym czasie kilku kilkukrotnie odczytuje kolor i nie może go odczytać. A do umożliwia mi funkcja PixelSearch?

0
Pijany Kaczor napisał(a):

Pseudo kod:

 
Ustawianie myszki
Pętla:
   sprawdzanie pozycji myszki
   sprawdzanie jaki kolor znajduje się w miejscu myszki
   if aktualny-kolor == XX i pozycja myszki == XX:
      -- KOD --
   if aktualny-kolor == YY i pozycja myszki == YY:
      -- KOD --

Ale nie wiem czy przypadkiem nie powinno się założyć haka na okno z którego chce się pobrać kolor.

Nie za bardzo rozumiem tą funkcje. Mógłbyś podać kompletny przykład z przykładowymi danymi? A Hak to jest kod koloru? Bo ja odczytuje kod koloru i współrzędne z programu AutoIt Info

0

A skąd wiesz że program nie działa po jakimś czasie? Może próbujesz to robić na flashu?

0

Po prostu widzę jak kursor się zachowuje. I jakie działania podejmuje.

0
 

While 1


if PixelGetColor (1734, 205) = 0xF5F5F5 Then
EndIf



if PixelGetColor (973, 330) = 0xC9302C Then
	MouseMove (522,445)
	MouseClick ("left")
	MouseMove (625, 444)
	MouseClick ("left")
	MouseMove (705, 578)
	MouseClick ("left")
	Sleep (40000)
EndIf


if PixelGetColor (972, 331) <> 0xC9302C Then
	MouseMove (882, 445)
	MouseClick ("left")
	MouseMove (713, 577)
	MouseClick ("left")
	Sleep (40000)
EndIf



WEnd 

Trochę zmodyfikowałem mój kod teraz działa prawie tak jak sobie to zaplanowałem, tylko chce aby ta cześć:

 if PixelGetColor (1734, 205) = 0xF5F5F5 Then
EndIf

była powtarzana przez cały czas aż do spełnienia warunku, a po spełnieniu tego jedzie do wersu i dalej:
if PixelGetColor (973, 330) = 0xC9302C Then

A po dojechaniu do końca kody ponownie wróciła do 1 części i czekała na spełnienie warunku.

PS: Gdy wykryje inny kolor niż założony (w tej 1 części) czeka, a gdy spełni warunek jedzie dalej. Problem jest w tym że nie wiem jaka jest do tego komenda aby czekał.

0
While 1

if PixelGetColor (1755, 205) = 0xD9534F Then
ExitLoop
EndIf

WEnd

While 2
if PixelGetColor (973, 330) = 0xC9302C Then
	MouseMove (522,445)
	MouseClick ("left")
	MouseMove (625, 444)
	MouseClick ("left")
	MouseMove (705, 578)
	MouseClick ("left")

EndIf


if PixelGetColor (972, 331) <> 0xC9302C Then
	MouseMove (882, 445)
	MouseClick ("left")
	MouseMove (713, 577)
	MouseClick ("left")

EndIf
ExitLoop
WEnd
 

Czy istnieje możliwość żeby po WEnd (ostatni wers), program wrócił do While 1 (pierwszy wers)?

0

Nie istnieje, program nawet ci nie dochodzi do drugiej pętli While bo pierwszą masz nieskończoną

0

Program dochodzi do 2 pętli, sprawdzałem. Ale czy czasem komenda do-while nie powoduje że program czyta wszystko od początku?

0

Do-while to nie jest komenda. Zrób sobie funkcję z pierwszej pętli i dodaj jej wywołanie na końcu kodu.

0

Mógłbyś to wstawić w mój kod? Bo nie za bardzo rozumiem tej funkcji.

0

Jakiej funkcji nie rozumiesz? Musisz wstawić te pierwszą pętle While do funkcji jak chcesz ją wywołać też na końcu kodu, no chyba że sobie skopiujesz całą pętle.

Func my_func()
; Wstawiasz tu co chcesz 
EndFunc

i wywołujesz przez my_func()

0
 

Func my_func()
	
While 1
if PixelGetColor (1755, 205) = 0xD9534F Then
ExitLoop
EndIf

WEnd

EndFunc

While 2
if PixelGetColor (973, 330) = 0xC9302C Then
	MouseMove (522,445)
	MouseClick ("left")
	MouseMove (625, 444)
	MouseClick ("left")
	MouseMove (705, 578)
	MouseClick ("left")

EndIf


if PixelGetColor (972, 331) <> 0xC9302C Then
	MouseMove (882, 445)
	MouseClick ("left")
	MouseMove (713, 577)
	MouseClick ("left")

EndIf
ExitLoop
WEnd

my_func()


O to chodzi?

0

Tak

0

Tylko w takim przypadku musisz też dodać wywołanie funkcji zaraz po jej deklaracji bo teraz ci się wykonuje najpierw While 2 a później While 1

0

Dzięki wszystko działa :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1