Programme nacheinander ausführen

  • Hallo Leute, ich hoffe ihr könnt mir helfen.

    Ich habe mir eine GUI mit Checkboxen und einen Installbutton erstellt.
    Je nach markierten Boxen, sollen diese Programme ausgeführt werden.

    Das Problem ist, dass sich die Programme parallel starten und es dann zu Schwierigkeiten kommt.

    Wie kann ich also dem Programm zuweisen, dass es warten soll bis es fertig ist?

    Gruss Joe

    • Offizieller Beitrag

    Ablauf ist ja in einer Schleife
    Vermute die Installprogs, die aufgerufen werden sind in einem Array.
    Nicht getestet, aber sollte funktionieren:

    [autoit]

    For $i = 1 To UBound($ar_Install)-1 ; oder ähnlich
    Run($ar_Install[$i])
    Do
    Sleep(1000)
    Until Not ProcessExists($ar_Install[$i])
    Next

    [/autoit]
  • Also die Boxen sind bei mir so definiert:

    mit UBound($ar_Install)-1 kann ich jetzt nichts anfangen.

    Was sollte in der Variable stehen?

    Ich hab mir zum Test mal 3 Dateien angelegt, test1.exe, test2.exe und test3.exe und eingesetzt. erfolglos.

    gruss joe

    • Offizieller Beitrag

    Hier mal (hoffentlich) etwas angepaßt an deine Struktur.
    Dein Code verrät nicht allzuviel. Was ich sehe, du arbeitest im OnEvent-Mode und wertest unnütze Ereignisse aus. Eine aktivierte Box wird automatisch 1 ;)

    [autoit]

    ; mal als Bsp.
    ; $Box1 für $prog1
    ; $Box2 für $prog2
    ; $Box3 für $prog3

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

    Dim $ar_Install[3]
    $ar_Install[0] = $prog1
    $ar_Install[1] = $prog2
    $ar_Install[2] = $prog3
    $j = 0
    For $i = $Box1 To $Box3
    If GUICtrlRead($i) = 1 Then
    Run($ar_Install[$j])
    Do
    Sleep(1000)
    Until Not ProcessExists($ar_Install[$j])
    EndIf
    $j += 1
    Next

    [/autoit]
  • danke ,so ist es aufjedenfall treffender für mein Problem.

    Zitat

    Dein Code verrät nicht allzuviel. Was ich sehe, du arbeitest im OnEvent-Mode und wertest unnütze Ereignisse aus. Eine aktivierte Box wird automatisch 1

    Eben nicht. Ich hab mir mal die Werte ausgeben lassen. Der Wert ist, egal ob aktiviert oder deaktiviert,immer 9. (?!) Deshalb hab ich da nen Clickereignis draufgelegt. Funzt aber auch wunderbar.


    Gruss Joe

    • Offizieller Beitrag
    Zitat

    Eben nicht. Ich hab mir mal die Werte ausgeben lassen.


    Das ist auch richtig ;) , es ist ja der Wert des Handles, nicht der Status. Denn bekommst du erst mit GUICtrlRead( )

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("AForm1", 633, 454, 193, 115)
    GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
    $Checkbox1 = GUICtrlCreateCheckbox("ACheckbox1", 144, 216, 97, 17)
    GUICtrlSetOnEvent(-1, "ACheckbox1Click")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    WEnd

    Func ACheckbox1Click()
    MsgBox(0, '$Checkbox1', '$Checkbox1 = ' & $Checkbox1 & @LF & 'GUICtrlRead($Checkbox1) = '& GUICtrlRead($Checkbox1) )
    EndFunc

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


    Func AForm1Close()
    Exit
    EndFunc

    [/autoit]
  • Ich würde an deiner stelle statt

    [autoit]

    Run($ar_Install[$j])

    [/autoit]

    das hier nehmen:

    [autoit]

    RunWait($ar_Install[$j])

    [/autoit]

    Run startet nur das Skript
    RunWait startet das Skript und stoppt das Skript. Erst wenn RunWait fertig ist läuft auch das Skript weiter

  • bitte mal ein Beispiel, das letzte war mir etwas zu unverständlich.

    Also brauch ich nur noch Runwait? Das Script startet und wartet dann bis das Script beendet ist und macht dann erst weiter?
    Richtig?

  • Zitat

    Original von ExBerliner
    richtig. Runwait() startet ein programm und nachfolgender autoitcode wird erst ausgeführt, wenn das betreffende programm beendet ist.

    gruss exberliner

    Wollte ich auch schreiben, aber egal. RunWait stoppt das Skript und wartet bis RunWait seine Arbeit vollbracht. Und erst dann läuft das Skript weiter.

    Ein Beispiel von mir

    [autoit]

    MsgBox(64 + 8192, "Hallo", "Programm startet")

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

    RunWait(@WindowsDir & "\explorer.exe")

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

    If MsgBox(64 + 8192, "Tschüss", "Programm wird beendet") Then Exit

    [/autoit]