ShellExecute verständnis frage !

  • Hallo,

    ich bin noch ein kleiner Anfänger was AutoIt angeht. Ich habe eine kleine Verständnis frage zu dem Befehl "ShellExecute"
    In der Hilfe ist beschrieben, dass der Script nach dem start von ShellExecute den Script weiter ausführt. Tut er aber nicht.


    Was mach ich falsch ?

    Beispiel: Die Idee war eine Progessbar so lange durch laufen zulassen bis ShellExecute fertig ist.

    [autoit]


    Func _Test()
    $execute = ShellExecute ( " Mach was ")
    For $i = 1 to 100
    If $execute = 0 then
    GUICtrlSetData($Progess1, $i)

    If $i = 100 then
    $i = 0
    else
    $i += 1
    endif
    else
    MsgBox(0,"Fertig", "Fertig",0)
    exitloop
    endif
    next
    endfunc

    [/autoit]


    Wenn mir ein erklären könnte was ich falsch mach wäre das echt super.

    gruß pat2381

  • Hi,

    Zitat

    Beispiel: Die Idee war eine Progessbar so lange durch laufen zulassen bis ShellExecute fertig ist.


    Das wird leider kaum möglich sein, da du ja nicht abschätzen kannst, wann ein externes Programm mit ShellExecute(...) gestartet ist.
    Folglich bringt eine Progressbar nichts und sie wird nur von 0 auf 100 "springen".

    Die If-Bedingung

    [autoit]

    If $execute = 0 then

    [/autoit]

    wird außerdem nie ausgeführt (oder nur wenn ein Fehler bei ShellExecute vorliegt), da der Wert von ShellExecute in eine Variable geladen wird, die sich nicht automatisch aktualisiert.

  • Hallo,

    danke CyRoX für deine schnelle Antwort.
    Habe so etwas schon vermutet. :( Dann muss ich mir was anderes einfallen lassen.

    Aber es ist doch richtig, dass das Script weiter ausgeführt wird oder ? Nur bei ShellExecuteWait wird das Script angehalten bis das Programm beendet wird.
    Dann müsste er doch eigentlich trotzdem in die For-Schleife( oder wie unten den Text in die Statusbar schreiben) gehen oder nicht.?

    [autoit]


    ShellExecute("Mach was")
    GUICtrlSetData($statusbar1," Fertig...") ;---------Das macht er nicht!!!

    [/autoit]
  • Editieren
    Hallo, das mit dem Zusätzlichem hochzählen stimmt. Das ist doppelt gemoppelt. ;)

    Aber wenn ich es so mache, dann sollte es doch eigentlich funktionieren.

    Nur leider geht das nicht .

    [autoit]


    Func _Test()
    $execute = ShellExecute( "Mach was")

    If $execute = 1 Then
    GUICtrlSetData($status1," Fertig") ; --------->Statusbar
    Else
    GUICtrlSetData($Status1,"Abgebrochen")
    EndIf
    endfunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • Hallo,

    ich glaube wir reden aneinadner vorbei. ;)

    Da es ja mit der ProgressBar keine Möglichkeit gibt ( oder ich nicht weiß wie das machen könnte )habe ich was anderes probiert.

    Ich mein in dem letzten Beitrag eigetlich die Status-Bar. Habe das auch im Script so gekenzeichnet. ;)

    Ich habe das Gefühl als wenn er nach dem ShellExecute Befehl nicht weiter macht.

    Wenn ich eine Abfrage mache ála

    [autoit]

    If $execute = 1 Then

    [/autoit]

    dann sollte das doch gehen.

    ?(?(?(

    [autoit]


    func _compile_Srcipt()
    $sInput2 = GUICtrlRead($InpScript)

    $execute = ShellExecute( "Aut2exe.exe", "/in "& '"' & $sInput2 & '"' & " /out " & '"' & $sInput & "\Output\Text.exe" & '"' & " /x86")

    If $execute = 1 Then

    GUICtrlSetData($status1," Compile done...") ;-------------------< STATUSBAR>
    Else
    GUICtrlSetData($Status1,"Compile false...");-------------------< STATUSBAR>
    EndIf

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

    EndFunc

    [/autoit]

    gruß pat2381

  • Hallo,

    Danke das mit der Statusbar war mein Fehler :thumbup:

    Es geht !!! ;) ;) ;) :thumbup:

    Aber mit einer Progressbar wäre es schon schöner.

    Herzlichen dank für deine Unterstützung CyRoX

    Wenn aber noch jemand ne Idee hat wie man das mit einer Progressbar hinbekommt wäre das echt Super.

    Gruß pat 2381

  • Zitat

    Wenn aber noch jemand ne Idee hat wie man das mit einer Progressbar hinbekommt wäre das echt Super.


    Das ist nur möglich, wenn du weißt wie viel Zeit der externe Prozess benötigt bzw. dessen Fortschritt kennst. AutoIt kann weder zaubern, noch hellsehen (leider ;)). Wenn du uns konkret sagst um was für eine Aufgabe es sich handelt, die mit ShellExecute ausgeführt werden soll, dann können wir eventuell das ganze doch ermöglichen (falls es möglich ist).

  • Hallo,

    wenn du dir mein Beispiel im Beitrag 7 ansiehst dort wird die aut2exe mit Parametern gestartet und ein Script wird kompiliert.
    Gibt es vielleicht einen mir noch nicht bekannten Befehl der mir in diesem Fall eine Rückmeldung/Status zur Verfügung stellt.

    Zitat

    $execute = ShellExecute( "Aut2exe.exe", "/in "& '"' & $sInput2 & '"' & " /out " & '"' & $sInput & "\Output\Text.exe" & '"' & " /x86")

    Bin für alle Vorschläge offen.

    Gruß pat2381