Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Pixelgetcolor


Rekomendowane odpowiedzi

Opublikowano

Witam , zaczynam zabawe z autoitem (od 2-och dni) i mam do Was prosbe , a mianowicie :

-program ma wejsc na dana strone (klika na pasek zakladek w odpowiednia strone)

- jak strona sie zaladuje (sprawdza 1 pxel na stronce)

- dane pobiera z okienka(OpenOfficeCalc) obk przegladarki

- po czym loguje sie i czeka na kolejna strone

- gdy strona sie zaladuje (sprawdz 1 pixel) i przechodzi na kolejna strone ( i tak jeszcze ze 2 razy )

- na ostatniej strtonie wykonuje pewien skrypt wylogowuje sie i zaczyna wszystko od nowa

 

Mam pytanie, jak zrobic zeby po wejsciu na dana strone i wykonaniu zaplanowanej czynnosci programik czekal na zaladowanie sie kolejnej stronki bez ponownego uruchamiania skryptu na obecnej stronce (teraz mam ustawione po wykonanym zadaniu komende : Sleep ( czas ), jednak czasami net muli albo serwer i czynnosc jest powtarzana. Chcialbym tego uniknac. Druga sprawa jak do tego dodac ze po np. 20s bezczynnosci (strona sie ciagle laduje,) programik powtorzyl ostatnie zadanie (np. jeszcze raz nacisnal na link ze strona) ?

 

Wklejam kod z autoit (nie śmiać sie to moj 1 progrmik) :

 

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

Func stop ()
  Exit
EndFunc

Mouseclick ( "left" , 77, 122)  ; kliknięcie w strone z logowaniem

While 1


$zmienna = Pixelgetcolor(34,541) ; pixel szary przy logowaniu
$zmienna3 = Pixelgetcolor(210, 432) ; pixel rozowy przy wpisywaniu nicka
$zmienna4 = Pixelgetcolor(618, 662) ; pixel zolty
$zmienna5 = Pixelgetcolor(131, 281) ; pixel czarny po logowaniu



if $zmienna = 0xF0F0F0 Then
   Mouseclick ( "left" , 1662, 948)  ; kliknięcie w strzalke w dol w OpenOfficeCalc
   Mouseclick ( "left" , 1213, 946)  ; kliknięcie w A1 w OpenOfficeCalc
   Mouseclick ( "left" , 1351, 838)  ; kliknięcie w "kopiuj" w OpenOfficeCalc
   Mouseclick ( "left" , 698, 313)   ; kliknięcie w pole logowania
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Send ( "{BS}" )
   Mouseclick ( "right" , 674, 314)  ; kliknięcie w (nazwa użytkownika) ppm
   Sleep ( 200 )
   Mouseclick ( "left" , 717, 394)  ; kliknięcie we wklej (nazwa użytkownika)
   Mouseclick ( "left" , 514, 359)  ; kliknięcie w "Password"
   Send ( "{NUMPAD1}" )
   Send ( "{NUMPAD2}" )
   Send ( "{NUMPAD3}" )
   Send ( "{NUMPAD4}" )
   Send ( "{NUMPAD5}" )
   Send ( "{NUMPAD6}" )
   Send ( "{NUMPAD7}" )
   Send ( "{NUMPAD8}" )
   Mouseclick ( "left" , 428, 454)  ; kliknięcie w "zaloguj"
   Sleep ( 4000 )

EndIf

if $zmienna5 = 0x1E1E1E Then
   Mouseclick ( "left" , 77, 122)  ; kliknięcie w kolejna strone
   Sleep ( 5000 )

   EndIf

   if $zmienna3 = 0xFFE3DF Then
     Mouseclick ( "left" , 1504, 947)  ; kliknięcie w C1 w OpenOfficeCalc
     Mouseclick ( "left" , 1351, 838)  ; kliknięcie w "kopiuj" w OpenOfficeCalc
     Mouseclick ( "left" , 403, 497)  ; kliknięcie w wybor nazwy uzytkownika
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Send ( "{BS}" )
     Mouseclick ( "right" , 405, 498)  ; kliknięcie w wybor nazwy uzytkownika (nazwa użytkownika) ppm
     Sleep ( 200 )
     Mouseclick ( "left" , 448, 578)  ; kliknięcie wklej nazwa użytkownika
     Mouseclick ( "left" , 405, 498)  ; kliknięcie w zatwierdz wybor nazwy uzytkownika
     Send ( "{ENTER}" )
     Sleep ( 2000 )

  EndIf

  if $zmienna4 = 0xF8C000 Then
     Mouseclick ( "left" , 784, 621)  ; wybierz serwer do gry
     Sleep ( 300 )
     EndIf
...
Wend

Opublikowano

Po pierwsze to niepotrzebnie piszesz wiele linijek

Send("{BS}"

Możesz wpisać raz, a:

Send("{BS x}")

gdzie x to liczba nacisniec.

 

Po drugie, jeśli chcesz, aby program czekał aż strona się załaduje to używasz:

przy bibliotece IE.au3

_IELoadWait

a przy FF.au3

_FFLoadWait

(poszukaj w Helpie/udfie więcej o funkcjach)

 

Natomiast, jeśli chcesz aby program czekał określony czas to używasz:

przy IE.au3

_IELoadWaitTimeout(czas w milisekundach)

a przy FF.au3

_FFLoadWait(czas w milisekundach)

 

I teraz powtarzanie (oparte na FF.au3):

Func cos_tam()
    _FFStart("http://www.google.pl")
    _FFLoadWait(20000)
         While 1
               If @ERROR = 6 Then
                   <twoja funkcja ładująca stronę>
              Else 
                    ExitLoop
              EndIf
         WEnd
    <program powtarzal wczytywanie strony do skutku, teraz wykonuje dalsze czynności>
EndFunc

czwartkowy posmak w ustach przypomina
że nie ma sensu owijać w bawełnę
zmarzniętego truchła

przez latarnię ktoś przerzucił sznur
cumuje statek w bezpieczną przystań

czuję jak na skroniach zasycha sól
...

Opublikowano

Spoko, tymczasem mozesz dać plusika :P

czwartkowy posmak w ustach przypomina
że nie ma sensu owijać w bawełnę
zmarzniętego truchła

przez latarnię ktoś przerzucił sznur
cumuje statek w bezpieczną przystań

czuję jak na skroniach zasycha sól
...

Opublikowano

nie zrozumiałem użycia openoffisa w tym skrypcie ?? przcież nic innego nie robi jak tylko pobiera się z niego dane a to wystarczy przypisac w zmiennej bez potrzeby użycia innego programu i piepszyć się z jakimś kopiowaniem i wklejaniem za pomocą myszki .

 

$login = "LOGIN"

$haslo = "HASLO"

 

 

inny błąd i to rażący : Pixelgetcolor zwraca daną w decmalnym zapisie ( dziesiętny ) a ty do porównania używasz heksandecymalnego ( szesnastkowego ) czyli nie działa wcale skrypt

tak tzreba zapisywać kolory :

Dec("abcdef")  ; bez początkowego 0x 

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

nie zrozumiałem użycia openoffisa w tym skrypcie ?? przcież nic innego nie robi jak tylko pobiera się z niego dane a to wystarczy przypisac w zmiennej bez potrzeby użycia innego programu i piepszyć się z jakimś kopiowaniem i wklejaniem za pomocą myszki .

 

$login = "LOGIN"

$haslo = "HASLO"

 

 

inny błąd i to rażący : Pixelgetcolor zwraca daną w decmalnym zapisie ( dziesiętny ) a ty do porównania używasz heksandecymalnego ( szesnastkowego ) czyli nie działa wcale skrypt

tak tzreba zapisywać kolory :

Dec("abcdef")  ; bez początkowego 0x 

 

 

co do uzycia openoffica to masz racje , jednak dopiero zaczynam prace z autoit i tak mi jest latwiej na poczatku tzn po prostu tak na razie umiem ;)

 

co do pixelgetcolor i poprawnosci dzialania to nie ma problemu, kolor danego pixela uzylem za pomoca "AutoIt v3 Window Info" - moze dziwne , ale dziala ;)

 

 

Zamotalem sie i nie wiem jak to zrobic zeby na koncu pierweszego if , po wykonanej czynnosci program nie probowal zrobic to kolejny raz (w petli While 1) (bez uzywania sleep (czas)) :

 

if $zmienna = 0xF0F0F0 Then
   Mouseclick ( "left" , 1662, 948)  ; kliknięcie w strzalke w dol w OpenOfficeCalc
   Mouseclick ( "left" , 1213, 946)  ; kliknięcie w A1 w OpenOfficeCalc
   Mouseclick ( "left" , 1351, 838)  ; kliknięcie w "kopiuj" w OpenOfficeCalc
   Mouseclick ( "left" , 698, 313)   ; kliknięcie w pole logowania
   Send ( "{BS 20}" )
   Mouseclick ( "right" , 674, 314)  ; kliknięcie w (nazwa użytkownika) ppm
   Sleep ( 200 )
   Mouseclick ( "left" , 717, 394)  ; kliknięcie we wklej (nazwa użytkownika)
   Mouseclick ( "left" , 514, 359)  ; kliknięcie w "Password"
   Send ( "{NUMPAD1}" )
   Send ( "{NUMPAD2}" )
   Send ( "{NUMPAD3}" )
   Send ( "{NUMPAD4}" )
   Send ( "{NUMPAD5}" )
   Send ( "{NUMPAD6}" )
   Send ( "{NUMPAD7}" )
   Send ( "{NUMPAD8}" )
   Mouseclick ( "left" , 428, 454)  ; kliknięcie w "zaloguj"
   Sleep ( 4000 )

EndIf

if $zmienna5 = 0x1E1E1E Then
   Mouseclick ( "left" , 77, 122)  ; kliknięcie w kolejna strone
   Sleep ( 5000 )

   EndIf

Opublikowano

użyj jakiejś dodatkowej zmiennej, flagi (albo 1, albo 0)

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

$flags=0

...

If $flags=0 then

<twój kod>

$flags=1

Endif

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

co do pixelgetcolor i poprawnosci dzialania to nie ma problemu, kolor danego pixela uzylem za pomoca "AutoIt v3 Window Info" - moze dziwne , ale dziala ;)

skoro dla ciebie dwie różne wartości o całkowicie innym sposobie zapisu to to samo, szkoda cie przekonywać ze nie masz racji po 2 dniach używania programu

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

inne, nie inne ale jak działa to może autoit sam konwertuje/wykrywa zapis koloru

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

no qrde, nie wiedziałem że myśli za nas nawet zamieniając samemu wartości na akurat nam potrzebne

też chce taka instalke/dystrybucje autoita !

 

a tak zamienia od razu w hexa

 

 $zmienna = Hex(Pixelgetcolor(34,541)) ; pixel szary przy logowaniu

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

wytłumacz mi dlaczego działa

liczylem na barce lecz ona niemogla wygrac.

Przez kibicow ktorzy przy rzutach roznych wolnych swiecili w messiego laserami

Opublikowano

skoro dla ciebie dwie różne wartości o całkowicie innym sposobie zapisu to to samo, szkoda cie przekonywać ze nie masz racji po 2 dniach używania programu

 

wiem o co Ci chodzi , ale pewnie jest tak jak kolega nizej napisal , ze autoit sam rozpznaje kolory i je konwertuje

 

jesli chodzi o roznice w zapisie dziesiatkowym i szesnastkowym to masz 100% racji i z tym sie z Toba zgadzam , ale skoro autoit dziala z tym co mu podalem to nie widze potrzeby by to zmieniac , proponuje sprawdzic to u siebie i bedziesz wiedzial o czym mowie

Opublikowano

hexy tak jak rozny zapis

00ABCDEF = 0xABCDEF

 

 

ale dec w hexa automatycznie ?

 

matematycznie wychodzi ze :

240240240 = 00F0F0F0

 

dziwne

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Opublikowano

Udalo mi sie zrobic bota ktory dziala :D kod jest b.prosty tzn wszystko jest w petli While 1 , a w srodku z 10 If ;) Najwazniejsze ze dziala :) Zostal mi jedynie jeden problem - jak zrobic zeby program naciskal mi na pewny punkt , jezeli ten punkt nie zostal wcisniety od 2min ?

 

 


while 1

$x1 = Mouseclick ( "left" , 674, 314)

If $x1 = ??? then ... (cos z czasem ale nie mam pomyslu i wiedzy)

endif

wend

 

Czekam na Wasza pomoc.

Opublikowano

Global $pewien_punkt[2] = [150,503]; 
Global $ostatnie_klikniecie = 0; 

Func wcisnij_i_zapisz_godzine_wcisniecia_do_zmiennej()
  MouseClick('primary', $pewien_punkt[0], $pewien_punkt[1]) 
 $ostatnie_klikniecie = _Date_Time_GetTickCount()
EndFunc

Do

; ; ; 

If _Date_Time_GetTickCount() - $ostatnie_klikniecie > 2 * 60 * 1000 Then _ 
  wcisnij_i_zapisz_godzine_wcisniecia_do_zmiennej()

; ; ; 

Until False










Func _Date_Time_GetTickCount()
Local $aResult = DllCall("kernel32.dll", "dword", "GetTickCount")
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc   ;==>_Date_Time_GetTickCount

 

 

@lokuxd (down):

NIE :P

Ta sygnatura jest pusta.

Opublikowano

Global $pewien_punkt[2] = [150,503]; 
Global $ostatnie_klikniecie = 0; 

Func wcisnij_i_zapisz_godzine_wcisniecia_do_zmiennej()
  MouseClick('primary', $pewien_punkt[0], $pewien_punkt[1]) 
 $ostatnie_klikniecie = _Date_Time_GetTickCount()
EndFunc

Do

; ; ; 

If _Date_Time_GetTickCount() - $ostatnie_klikniecie > 2 * 60 * 1000 Then _ 
  wcisnij_i_zapisz_godzine_wcisniecia_do_zmiennej()

; ; ; 

Until False

 

 

Dzieki. Jutro sie zajme sie tym kodem bo dzis juz czasowo nie dam rady. Jeszcze raz wielkie dzieki. W razie problemow bede pytal ;)

Opublikowano

wstawilem wspolrzedne w ten kod i przy If wyskakuje error :

 

MouseClick ( "left" , 76, 120 )



Global $pewien_punkt[2] = [76, 120]; 
Global $ostatnie_klikniecie = 0; 

Func wcisnij_i_zapisz_godzine_wcisniecia_do_zmiennej()
  MouseClick('primary', $pewien_punkt[76], $pewien_punkt[120]) 
 $ostatnie_klikniecie = _Date_Time_GetTickCount()
EndFunc

Do

; ; ; 

If _Date_Time_GetTickCount() - $ostatnie_klikniecie > 2 * 2 * 1000 Then _ 
  wcisnij_i_zapisz_godzine_wcisniecia_do_zmiennej()

; ; ; 

Until False

 

Co moze byc nie tak ? wspolrzedne zle wpisalem czy co ?

Opublikowano

piszesz że błąd ale nie napisałeś JAKI

 

zresztą jak ci piszą DOPISZ to dopisz jak należy by działało

If you = stupid then

insert(foot.in.your.ass)

end if

licznik-54-96732-stat.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...