2 dauernde Schleifen für SingleSignOn

  • Hallo zusammen,

    ich baue ein AutoIT-Skript, welches als SingleSignOn-Modul dienen soll. Soweit, so gut.


    Was ich will, ist, dass dauernd auf das hier geprüft wird, damit das Skript sauber beendet wird, sobald die eigentliche Exe auch geschlossen wurde:

    [autoit]

    While 1
    ProcessWaitClose($PID)
    msgbox(0,"ende","ende")
    Exit
    WEnd

    [/autoit]


    Und dies hier, damit der User im Programm nicht selbst das Passwort ändern kann:

    [autoit]


    WinWaitActive("[CLASS:TFrmDBValidatePassword]", "")
    Send("{ESC}")
    Send("{ESC}")
    msgbox(0,"jjjj","jjjj")

    [/autoit]


    Wie würdet ihr das am besten realisieren, sprich dass diese beiden Blöcke dauerhaft abgefragt werden (und auch nicht das eine vom anderen abhängt!)?


    Danke !!!


    Unten das gesamte Skript:

    [autoit]

    $PID = run ("c:\popwin\client\PW.exe")
    WinWait("PW-Anmeldung")
    BlockInput(1)
    ControlSend("PW-Anmeldung", "", "[CLASS:TEdit; INSTANCE:2]",@Username)
    ControlSend("PW-Anmeldung", "", "[CLASS:TEdit; INSTANCE:1]", "testtesttest")
    Send("{ENTER}")
    BLOCKINPUT(0)
    $ret = WinWaitActive("[CLASS:TMessageForm]", "" , 1 )

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

    If not $ret = 0 Then
    MsgBox(0, "Fehler aufgetreten", "Fehler aufgetreten")
    Send("{ESC}")
    Send("{ESC}")

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

    Else
    EndIf
    WinWaitActive("[CLASS:TFrmDBValidatePassword]", "")
    Send("{ESC}")
    Send("{ESC}")
    msgbox(0,"jjjj","jjjj")

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

    While 1
    ProcessWaitClose($PID)
    msgbox(0,"ende","ende")
    Exit
    WEnd

    [/autoit]
  • z.B. so

    Spoiler anzeigen
    [autoit]

    While 1
    If Not ProcessExists($PID) Then
    MsgBox(0, "ende", "ende")
    Exit
    EndIf

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

    If WinActive("[CLASS:TFrmDBValidatePassword]", "") Then
    Send("{ESC}")
    Send("{ESC}")
    MsgBox(0, "jjjj", "jjjj")
    EndIf
    WEnd

    [/autoit]

    Gruss Shadowigor

  • Hallo auch,


    vielen Dank für die flotte Antwort ;) Klappt einwandfrei!


    Nun stehe ich leider noch vor dem Problem, dass ich zu Beginn des Skriptes, also nachdem die EXE angestartet wird, auf Fehlermeldungen prüfen möchte, welche nur zu diesem Zeitpunkt bzw. so ca. 5 Sekunden danach aufkommen können (z.B. Datenbankverbindung nicht da etc.). Da ich hier lediglich den Dialog bzw. das PopUp abfange und nicht auf Inhalte achte, darf dieser Teil nicht in der generellen While-Schleife sein. Doch wie bekomme ich diese beiden Prüfungen so zu Beginn für ca. 5 Sekunden unter? Eine ist klar, aber zwei ?


    [autoit]

    $ret2 = WinWaitActive("[CLASS:TFrmPopErrorDlg]", "" , 1)

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

    If not $ret2 = 0 Then
    MsgBox(0, "Fehler aufgetreten", "Fehler aufgetreten")
    Send("{ESC}")
    Send("{ESC}")
    Exit

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

    Else
    EndIf

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

    $ret1 = WinWaitActive("[CLASS:TMessageForm]", "" , 1)

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

    If not $ret1 = 0 Then
    MsgBox(0, "Fehler aufgetreten", "Fehler aufgetreten")
    Send("{ESC}")
    Send("{ESC}")
    Exit

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

    Else
    EndIf

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    $timer = TimerInit()
    While 1
    $ret2 = WinActive("[CLASS:TFrmPopErrorDlg]", "")
    If Not $ret2 = 0 Then
    MsgBox(0, "Fehler aufgetreten", "Fehler aufgetreten")
    Send("{ESC}")
    Send("{ESC}")
    Exit
    Else
    EndIf
    $ret1 = WinActive("[CLASS:TMessageForm]", "")
    If Not $ret1 = 0 Then
    MsgBox(0, "Fehler aufgetreten", "Fehler aufgetreten")
    Send("{ESC}")
    Send("{ESC}")
    Exit
    Else
    EndIf
    If TimerDiff($timer) >= 5000 Then ExitLoop ; nach 5 sekunden verlasse die schleife
    WEnd

    [/autoit]
  • Danke, klasse!


    Mir ist nun aufgefallen, dass der tatsächlich wartet, bis die Schleife 5 Sekunden lang durch ist, auch wenn zuvor schon

    [autoit]

    WinWait("PW-Anmeldung")

    [/autoit]

    erscheint.

    Kann man so eine Schleife eigentlich auch an so ein Ereignis knüpfen? Also: mach die Schleife so lange, bis das Dialogfeld "PW-Anmeldung" erkannt wird?