Problem mit WinWaitClose

  • Hallo,
    ich habe da ein kleines Problem mit dem WinWaitClose-Befehl.
    Ich schreibe ein Installationsscript mit mehreren Fenstern.

    Zuerst bearbeite ich das erste Fenster mit den entsprechenden Befehlen und schließe dieses Fenster mit einem Klick auf den "Weiter"-Button.
    Der letzte Befehl für dieses Fenster ist dann der WinWaitClose-Befehl damit das Script pausiert bis das erste Fenster wirklich nicht mehr existiert.

    Dann kommt das zweite Fenster dran. Der erste Befehl ist dann der WinWait-Befehl, damit das Script auf dieses Fenster wartet.
    Danach kommen einige Befehle die dazu dienen, das Script abzubrechen und eine Fehlermeldung auzugeben falls das Fenster zwei doch nicht existieren sollte.

    Nun zu meinem Problemchen:
    Meistens läuft das ganze Script einwandfrei druch, dann läuft nur das erste Fenster anscheinend einwandfrei durch und dann erscheint die Fehlermeldung, das Fenster zwei nicht aktiviert werden konnte (es ist aber meistens sogar zu sehen wenn das Script einfach hängenbleibt).
    Die Ursache ist dann immer der WinWaitClose-Befehl vom Fenster eins.
    Das Script läuft genau bis zu diesem Befehl und bleibt da hängen. Auch wenn man ein Timeout bei dem WinWaitClose-Befehl angibt.
    Das Script bleibt auch dann hängen und das Timeout wird einfach nicht beachtet.
    Anscheinend tritt dieses Problem auf, wenn das Fenster schon nicht mehr existiert wenn der WinWaitClose-Befehl aufgerufen wird.
    (Nach dem was in der Hilfe zu AutoIt steht, dürfte das aber kein Problem sein).


    Ich habe einmal ein kleines Beispielscript angefügt, damit mann sehen kann, wie ich das meine.

    Spoiler anzeigen

    ; Eintragungen usw. im ersten Fenster.
    WinWait($Fenster_1_Titel, "", 10)
    WinActivate($Fenster_1_Titel, "")
    WinWaitActive($Fenster_1_Titel, "", 5)
    If Not WinActive($Fenster_1_Titel, "") Then
    BlockInput(0)
    MsgBox(262192, $Fenster_1_Titel, "Das Fenster 1 konnte nicht aktiviert werden !") ; MsgBox = 1, 4, 1, 1, 2.
    Exit (1)
    EndIf
    ; Das Fenster 1 durch einen Klick auf den "Weiter"-Button schließen und das nächste Fenster aufrufen.
    ControlClick($Fenster_1_Titel, "Weiter", 1)
    WinWaitClose($Fenster_1_Titel, "", 5)

    ; Eintragungen usw. in Fenster 2.
    WinWait($Fenster_2_Titel, "", 10)
    WinActivate($Fenster_2_Titel, "")
    WinWaitActive($Fenster_2_Titel, "", 5)
    If Not WinActive($Fenster_2_TitelTitel, "") Then
    BlockInput(0)
    MsgBox(262192, $Fenster_2_Titel, "Das Fenster 2 konnte nicht aktiviert werden !") ; MsgBox = 1, 4, 1, 1, 2.
    Exit (1)
    EndIf
    ; Weitere Befehle bis zum Ende des Scripts

    Worann liegt das eigentlich, meistens läuft das Script einwandfrei und auch der WinWaitClose-Befehl wird richtig abgearbeitet und dann wiederum geht der WinWaitClose-Befehl nicht mehr ?
    Oder währe es in dem Script nicht sogar besser den WinWaitClose-Befehl durch ein Sleep(1000)-Befehl zu ersetzen ?
    (Mit dem Sleep(1000)-Befehl als Ersatz läft es immer einwandfrei, nur ist das dann auch so sicher ?)

    Danke für die Hilfe.

    Gruß:
    BigRox

    Einmal editiert, zuletzt von BigRox (3. April 2008 um 12:00)