Schleifen.... brauche eine hilfe......

  • Habe folgendes vor:

    Er soll so lange warten bis die eine oder die andere farbe an einer bestimmten stelle des fensters kommt (entweder es wird oben links grün, oder unten links grün), und dann ein paar aktionen durchführen...
    irgendwie funktioniert das was ich vor habe nicht...
    NAja und ich wollte wissen´, wie man diese schleife nur richtig formuliert in autoit... ich verstehe es ja nur ich kann es nicht richtig anwenden :((


    For $i=1 To 100 ;dass ganze soll 100 mal passieren
    ;hier passiert viel ist aber unnötig zu posten

    While 1
    Local $iColor1 = PixelGetColor(x,y) ;get pixelcolor to detect SAP mask at the top
    Local $iColor2 = PixelGetColor(x,y) ;get pixelcolor to detect SAP mask at the bottom

    Case 1 $iColor1="13752028" then
    sleep (100)

    exitloop

    Case 2 $iColor2="13752028" then
    exitloop
    WEnd
    $sRow = $sRow + 1 ; go to the next row and search the next
    Next

  • Generell ware es nicht schlecht dein Code in den Tag [autoit][/autoit] zu packen für die Lesbarkeit.
    Dann hat dein Script einige Fehler.
    - "Case" ohne Switch/Select ?
    - x und y müssen noch ersetzt werden durch die pixelangabe (0,0 für linke obere ecke; 0,Y für linke untere ecke, wobei Y am besten mit @DesktopHeight oder so angegeben wird, eben nach fenstergröße)
    - Warum die While nicht direkt abhängig von der Farbe machen?

    Habe mal 2 Versionen wie sie funktionieren könnten gemacht:

    [autoit][/autoit][autoit][/autoit][autoit]

    For $i=1 To 100 ;dass ganze soll 100 mal passieren
    ;hier passiert viel ist aber unnötig zu posten

    [/autoit][autoit][/autoit][autoit]

    While 1
    Local $iColor1 = PixelGetColor(x,y) ;get pixelcolor to detect SAP mask at the top
    Local $iColor2 = PixelGetColor(x,y) ;get pixelcolor to detect SAP mask at the bottom
    If $iColor1="13752028" OR $iColor2="13752028" then
    ;Hier dein Code
    sleep (100)
    exitloop
    EndIf
    WEnd
    $sRow = $sRow + 1 ; go to the next row and search the next
    Next

    [/autoit]

    oder die while direkt abhängig ohne exitloop(ist einfach sauberer, aber das ist nur meine meinung :> )

    [autoit][/autoit][autoit][/autoit][autoit]

    For $i=1 To 100 ;dass ganze soll 100 mal passieren
    ;hier passiert viel ist aber unnötig zu posten
    $bGreen = False
    While Not $bGreen
    Local $iColor1 = PixelGetColor(x,y) ;get pixelcolor to detect SAP mask at the top
    Local $iColor2 = PixelGetColor(x,y) ;get pixelcolor to detect SAP mask at the bottom
    If $iColor1="13752028" OR $iColor2="13752028" then
    ;Hier dein Code
    sleep (100)
    $bGreen = True
    EndIf
    WEnd
    $sRow = $sRow + 1 ; go to the next row and search the next
    Next

    [/autoit]
  • Zitat

    hier passiert viel ist aber unnötig zu posten


    So etwas zu behaupten ist schon beinahe grob-fahrlässig :D
    Ne im Ernst, es gibt NICHTS "unnötiges" in einem Quellcode, jeder Zeile bewirkt etwas und jeder noch so kleine Fehler in einer x-beliebigen Zeile (und sei es jetzt nur eine falsch auskommentierte Kommentarzeile) kann ein ganzes Programm funktionslos machen, teilweise stürzt das Programm dadurch nicht mal ab sodass man wirklich Zeile um Zeile durchsuchen darf wegen einer falschen Zahl oder dem Verwechseln einer Integer-Variable mit eine beinahe gleichnamigen Boolean (ja, das ist mir schon passiert :whistling: ich hab danach mein ganzes Variabel-Benammselungskonzept überarbeitet).

    So ganz nebenbei wenn du es nicht anwenden kannst, dann hast du es auch noch nicht verstanden :P

    Bild1: Ich beim debuggen