Abfrage mittels PixelGetColor

  • Hallo zusammen. Ich bin noch ziemlich neu bei AutoIT. Habe zwar Programmiererfahrungen mit anderen Programmiersprachen, aber bin halt bei AutoIt noch etwas unsicher bei der Syntax.

    Also ich will folgendes:
    Einen gewissen Punkt oder Fläche nach einer Farbe absuchen, und falls sie gefunden wurde , das an einer bestimmten stelle ein Mausklick gemacht wird.
    So Klingt einfach, ist es vielleicht auch, aber nicht für mich =D

    Gut 1. Problem. Ich weiß die Coordinaten von der Fläche. DIe Farbe ist eher ein Übergang, darum dachte ich ist es einfacher, wenn ich den Farbcode von 1 Pixel nehme und dannach suchen lasse. Also sagen wir mal wenn - grob - in der unteren rechten Ecke ein grünes Lämpchen aufleuchtet soll er irgendwo hinklicken.
    In der Zeit wo das Grüne Lämpchen nicht leuchtet soll er warten und abfragen ob es schon grün ist. Nachdem es leuchtet, einmal kurz klicken und fertig. Dann ist die Funktion zu ende und die nächste startet.

    Gedacht hab ich mir das jetzt so ( wobei das nicht geht xD :(

    Code
    While (pixelgetcolor (1082,723) != 0xffff8b)
    
    	PixelSearch(0,0,1082,723,0xffff8b)
    	sleep(random(2213,2223))
    	mouseclick("left",646,893)
    
    	EndFunc

    Einmal editiert, zuletzt von Net_Ghost03 (22. Januar 2009 um 22:29)

  • Ah ok danke. Aber das geht so trotzdem nicht wie ich es will. ^^

    Code
    While (pixelgetcolor (1082,723) <> 0xffff8b)
    
    	if (pixelgetcolor (1082,723) = 0xffff8b) Then 
    
    	sleep(random(2213,2223))
    	mouseclick("left",646,893)
    	EndIf
    	WEnd
    	EndFunc

    So hatte ich es jetzt. Aber geht nicht, dann kommt n error.

    2 Mal editiert, zuletzt von Net_Ghost03 (22. Januar 2009 um 22:47)

  • Hi,
    also ich würde an deiner Stelle mal ein bisschen weiter vorne anfangen.

    [autoit]

    While (PixelGetColor(1082, 723) <> 0xffff8b)
    If (PixelGetColor(1082, 723) = 0xffff8b) Then
    Sleep(Random(2213, 2223))
    MouseClick("left", 646, 893)
    EndIf
    WEnd

    [/autoit]

    Ein IF wird immer mit ENDIF geschlossen, es sei denn, die Anweisung ist nur einzeilig.
    Auch eine WHILE muss immer geschlossen werden, mit WEND.

    Du hast zwar alle Befehle geschlossen, aber du schließt danach eine Funktion mit ENDFUNC, die gar nicht vorhanden ist.
    Wenn man den Code richtig einrückt, sollte das aber direkt ins Auge springen ;).

  • Endfunc ist für die Funktion in der alles steht. Hab ich jetzt nicht dazugeschrieben, weil wollte die endfunc gar nicht mitkopieren.

    Ich weiß aber woran der fehler jetzt liegt. Die grüne lampe ist leicht durchsichtig und der hintergrund ändert sich. Also ist das grün immer etwas anders. kann man auch einen Grünbereich suchen? Also etwas heller oder dunkler?

  • --> PixelSearch

    Da kannste als 6. Paramter shade-variation mit angeben.

    Zitat von Hilfe

    A number between 0 and 255 to indicate the allowed number of shades of variation of the red, green, and blue components of the colour. Default is 0 (exact match).

  • hm aber wie soll ich dann die While formulieren? Kann ich zB sowas wie While PixelSearch (x,x,x,x) <> TRUE)
    Also abgleichen ob er was gefunden hat? Weil der soll das ja nur solange machen bis er was gefunden hat, dann klicken und fertig.

    Habe es zZ so:

    Code
    While (PixelSearch(835,704,1255,736,0xffff8b,20) <> True)
    If ( PixelSearch(835,704,1255,736,0xffff8b,30)) Then
    	     mouseclick("left",646,893)
    	 EndIf
    WEnd

    Funzt aber nicht T_T

    Einmal editiert, zuletzt von Net_Ghost03 (24. Januar 2009 um 01:12)

    • Offizieller Beitrag

    Weil der soll das ja nur solange machen bis er was gefunden hat, dann klicken und fertig.

    [autoit]

    Do
    $aRet = PixelSearch(835,704,1255,736,0xffff8b,30)
    Until Not @error
    MouseClick("left",646,893)

    [/autoit]


    Denk dran, sollte die Farbe nicht auftauchen, hängst du in einer Endlosschleife. Falls es länger dauern kann, bis die Farbe erscheint, sollte in die Schleife noch ein kleines Sleep mit rein.