"Warten bis Fenster geschlossen ist" funktioniert nicht wie gewünscht

  • Hallo,

    mit meinem Skript steuere ich ein Programm, welches Texte als MP3s umwandelt. Die Steuerung des Programms klappt mittlerweile wunderbar, bis auf eine Sache.
    Wenn das Audio-File erstellt wird, öffnet sich ein Fenster mit Fortschrittsanzeige und 2 Knöpfen. Ist die Umwandlung abgeschlossen, schließt sich das Fenster automatisch.
    Mein Skript soll solange warten, bis die Umwandlung abgeschlossen ist, d.h. das Fenster sich geschlossen hat.

    Ich habe es versucht mit:

    [autoit]

    WinWaitClose("Audio-Datei wird gespeichert")

    [/autoit]

    das scheint er aber einfach zu übergehen.

    Und auch mit:

    [autoit]

    While WinExists("[CLASS:TSavingWAVForm]")
    Sleep(2000)
    MsgBox(0, "", "Das Fenster existiert")
    WEnd

    [/autoit]

    Das beginnt zwar, wenn sich das Fenster öffnet, hört aber nicht auf, wenn sich das Fenster geschlossen hat.

    AutoIt Window Info:

    Spoiler anzeigen

    >>>> Window <<<<
    Title: Audio-Datei wird gespeichert
    Class: TSavingWAVForm
    Position: 476, 427
    Size: 327, 169
    Style: 0x96000000
    ExStyle: 0x00010101
    Handle: 0x004B036A

    >>>> Control <<<<
    Class: TsDragBar
    Instance: 1
    ClassnameNN: TsDragBar1
    Name:
    Advanced (Class): [CLASS:TsDragBar; INSTANCE:1]
    ID: 7144522
    Text: Audio-Datei wird gespeichert
    Position: 0, 0
    Size: 321, 20
    ControlClick Coords: 186, 16
    Style: 0x56000000
    ExStyle: 0x00010000
    Handle: 0x006D044A

    >>>> Mouse <<<<
    Position: 665, 446
    Cursor ID: 0
    Color: 0x0054E3

    >>>> StatusBar <<<<

    >>>> ToolsBar <<<<

    >>>> Visible Text <<<<
    Audio-Datei wird gespeichert
    Stopp
    Abbruch


    >>>> Hidden Text <<<<


    Habt ihr Ideen, was ich noch ausprobieren könnte?

    Einmal editiert, zuletzt von Eagle82 (30. November 2010 um 09:48) aus folgendem Grund: Problem gelöst - vielen Dank!

  • Vielleicht existiert das Fenster ja auch dauerhaft und wird nur unsichtbar gemacht.
    Du könntest also mal mit WinGetState überprüfen was zurückgegeben wird bevor und nachdem die Datei umgewandelt wurde und das Fenster scheinbar verschwunden ist. Wenn keine 0 zurückkommt existiert das Fenster noch.

  • Danke für den Tipp!

    Die Rückgabewerte sind wie folgt:

    Bevor sich das Fenster öffnet: 0
    Während das Fenster geöffnet ist: 15
    Nachdem es geschlossen sein sollte: 5

    Könnte ich mein Skript vielleicht anhand der unterschiedlichen Rückgabewerten pausieren lassen?
    Konnte die Bedeutung von "15" und "5" nicht finden.

  • Hallo Eagle82,

    Zitat von Hilfe zu WinGetState

    1 = Fenster existiert.
    2 = Fenster ist sichtbar.
    4 = Fenster ist freigegeben.
    8 = Fenster ist aktiv.
    16 = Fenster ist minimiert.
    32 = Fenster ist maximiert.

    die 15 steht also für 1 (existiert) + 2 (sichtbar) + 4 (freigegeben) + 8 (aktiv)
    die 5 steht also für 1 (existiert) + 4 (freigegeben) .

    Edit: Ergebnis für 5 angepasst, danke Molaynox
    mfg autoBert

    Einmal editiert, zuletzt von autoBert (29. November 2010 um 17:45)

  • funktioniert wunderbar und wie sich der Rückgabewert zusammensetzt habe ich nun auch verstanden.

    Vielen Dank, ihr habt mir wieder schnell und präzise weitergeholfen!