Handling von GUI's / Wie lasse öffne und schließe ich ein Gui für die dauer eines Prozesses

  • Hallo Leute,

    ich sitze nun seit ewigkeiten vor einen Problem und weiß nicht wie ich es lösen kann.

    Es dreht sich um folgendes:

    Ich rufe ein Prozess aus der Commandozeile auf:

    Code
    Run(@ComSpec & " /c " & $var, "",@SW_HIDE)

    und dann hatte ich vor für die Laufzeit des Prozesses ein GUI zu öffnen. Genauer gesagt ein Progressbar-GuI

    der Code sieht so aus:


    Jetzte ist es aber so, dass das Gui bzw. die Progressbar nicht einwandfrei läuft wenn ich die dortige While-Schleife entferne. das Nächste Problem ist das das GUI nicht beendet wird, wenn der aufgerufene Prozess beendet ist. Das Überprüfe ich wie folgt:

    Code
    While ProcessExists("cmd.exe")
    	progressbar()  // aufruf der Progressbar-Funktion
    
    WEnd

    Meines Wissens nach müssten hier ja auch mehrere GUI's geöffnet werden?!?! Aber ist immer nur eine. *versteh ich nicht*

    Ich habs auch schon mit if schleifen versucht, in dem ich abgefragt habe ob der Handle für den prozess 0 oder ungleich 0 ist, aber es gab keine änderung.

    Kann mir jemand ein Tip geben? wie ich einen Close an das GUI schicken kann sobald der Process beendet ist?


    thx

    Calimero

    Einmal editiert, zuletzt von Calimero876 (12. März 2009 um 22:17)

  • Vielleicht mit einer if abfrage in der while schleife... if not ProcessExist("...") Then GuiDelete(...)

  • Habe bei mir mal so getestet und das funktioniert

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $ProgressGui

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

    while 1
    if ProcessExists("Skype.exe") Then progressbar()
    WEnd

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

    Func progressbar()

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

    $ProgressGui = GUICreate("", 200, 32, -1, -1, BitOR($WS_SIZEBOX, $WS_POPUP, $WS_VISIBLE, $DS_SETFOREGROUND), BitOR($WS_EX_STATICEDGE, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    WinSetTrans($ProgressGui, "", 200)
    GUISetBkColor(0x000000, $ProgressGui)
    $ProgressLabel = GUICtrlCreateLabel("", 45, 3, 120, 18)
    GUICtrlSetColor($ProgressLabel, 0xFFFFFF);Progress Marquee + Controls

    ;~ $PMarquee = _ProgressCreate(1, 20, 200, 40,0x00FF00,0x00FF00,0x111111,0x111111)
    ;~ _ProgressSetText($PMarquee, "")
    ;~ _ProgressSetImages($PMarquee, "D:\Dokumente\Dateien von Andreas\AutoIt3\prgimgs\marquee.jpg", "D:\Dokumente\Dateien von Andreas\AutoIt3\prgimgs\bg.jpg")
    ;~ _ProgressRefresh($PMarquee)
    ;~ _ProgressMarquee($PMarquee, 2, 0)

    GUISetState()

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

    while 1
    if Not ProcessExists("Skype.exe") Then
    GUIDelete($ProgressGui)
    EndIf
    Wend

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

    EndFunc

    [/autoit]

    mfg SiLenCa

  • Wow super. Es funktioniert wirklich, vielen dank.

    wusste gar nicht das ich schleifen schachteln kann, wie bei c#.