Welche Schleife ist sinnvoll?

  • Hallo zusammen,

    in meinem Skript ist eine Funktion, die ein Programm überwacht, ob es Messageboxen öffnet.
    Je nach Titel der Messagbox wird dann eine Aktion ausgeführt.
    Ich benutze bisher eine While Schleife und frage mich, ob es noch besser geht. Denn im Schleifenkopf stehen insgesamt 7 Sachen die geprüft müssen. Denn ich habe 7 Messagebox-Titel in ein Array die beim durchlaufen natürlich allesamt geprüft werden müssen.

    Hier mal die Funktion:

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

    Func checkOpenMessages()
    Local $msgBoxArr[7] = ["Titel1", "Titel2", "Titel3", "Titel4", "Titel5", "Titel6, "Titel7"]
    Local $msgBoxText[4] = ["Text1", "Text2", "Text3"]
    Local $returnValue = 1
    Sleep(200)
    While WinExists($msgBoxArr[0]) = 1 Or WinExists($msgBoxArr[1]) = 1 Or WinExists($msgBoxArr[2]) = 1 Or WinExists($msgBoxArr[3]) = 1 Or WinExists($msgBoxArr[4]) = 1 Or WinExists($msgBoxArr[5]) = 1 Or WinExists($msgBoxArr[6]) = 1
    For $i = 0 To UBound($msgBoxArr) - 1
    WinActivate($msgBoxArr[$i])
    Select
    Case StringLeft(ControlGetText($msgBoxArr[$i], "", "[CLASS:Static; INSTANCE:3]"), StringLen($msgBoxText[0])) = $msgBoxText[0]
    ControlClick($msgBoxArr[$i], "", "[CLASS:Button; INSTANCE:2]");Klick Nein an
    $returnValue = -1
    Case StringLeft(ControlGetText($msgBoxArr[$i], "", "[CLASS:Static; INSTANCE:3]"), StringLen($msgBoxText[1])) = $msgBoxText[1]
    ControlClick($msgBoxArr[$i], "", "[CLASS:Button; INSTANCE:1]");Klick OK
    $returnValue = 1
    Case StringLeft(ControlGetText($msgBoxArr[$i], "", "[CLASS:Static; INSTANCE:3]"), StringLen($msgBoxText[2])) = $msgBoxText[2]
    ControlClick($msgBoxArr[$i], "", "[CLASS:Button; INSTANCE:1]");Klick OK
    $returnValue = -1
    Case StringLeft(ControlGetText($msgBoxArr[$i], "", "[CLASS:Static; INSTANCE:3]"), StringLen($msgBoxText[3])) = $msgBoxText[3]
    ControlClick($msgBoxArr[$i], "", "[CLASS:Button; INSTANCE:1]");Klick OK
    $returnValue = -1
    Case Else
    ControlClick($msgBoxArr[$i], "", "[CLASS:Button; INSTANCE:1]")
    $returnValue = 1
    EndSelect
    WinWaitClose($msgBoxArr[$i], "", 3000)
    Next
    WEnd
    Return $returnValue
    EndFunc ;==>checkOpenMessages

    [/autoit]

    Wie könnte ich die While Schleife vereinfachen? Funktionieren tut es auch so. Aber ich glaube es geht besser...

    Vielen Dank schon mal

    Grüße
    Sebastian

    Einmal editiert, zuletzt von Pace17881 (12. April 2014 um 14:45)