Starten und Beenden

  • ich hab dieses hier

    [autoit]

    ShellExecuteWait("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
    WinClose("[CLASS:MozillaWindowClass]")

    [/autoit]

    er soll Firefox starten und anschließend nach dem es gestartet ist schließen... aber er schließt nciht?!

  • [autoit]

    ShellExecute("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
    if ProcessExists("firefox.exe") Then
    ProcessClose("firefox.exe")
    EndIf

    [/autoit]

    kann es aer bicht verstehen sozu man sowas mache will

  • und zwar ist es bestandteil eines startscriptes nach einem neuem Image in einer Firma alle Programme werden einmal mit Adminrechten gestartet damit sie fehlerfrei laufen usw. deswegen starten und gleich schließen danach das nächste usw.

  • achso,na dann packe doch alle programme in ein array rein das geht schneller und verbraucht
    weniger speicher ;)

  • du hattest das mit nach einer bestimmten Zeit schließen geschrieben
    kannst du mir bitte nen Beispiel dafür zeigen

  • [autoit]

    ShellExecute("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
    if ProcessExists("firefox.exe") Then
    sleep(5000) ;<---------warten 5 sec bis zum schließen
    ProcessClose("firefox.exe")
    EndIf

    [/autoit]
  • Hi,

    statt dem Sleep würde ich das so machen:

    Spoiler anzeigen
    [autoit]


    ShellExecute("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
    WinWaitActive("Firefox") ; musst sehen wie der Titel ist. Nimm das Tool "AutoIt Windows Info"
    WinClose("Firefox")

    [/autoit]

    oder falls du nach dem Prozess gehen willst:

    Spoiler anzeigen
    [autoit]


    ShellExecute("C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
    While ProcessExists("firefox.exe") = 0
    Sleep(30)
    WEnd
    ProcessClose("firefox.exe")

    [/autoit]

    Gruß

    Prajoss

    Edit: Vorschaufunktion ist ganz praktisch, muss man nicht die Fehler nach dem Post ausbessern ^^

    "Never touch a running System!"

  • man könnte den ganze spass auch noch nach uhrzeiten machen ;)
    dann hat man nicht die ganze sleeps drinne und es ist genauer
    zb. porgramm1 start 12:00 ende 12:00:30 und dann programm2 12:01:30 ende um 12:02 und so weiter

  • ich bastel erstmal ein array und lasse das dann nach und nach ausgeben dann hab ich doch quasi nur eine routine
    wo das array nach und nach sich die programme einlädt und dann ausführt schließt usw.

  • Guten Morgen,

    Meine Idee sieht jetzt so aus

    [autoit]

    Dim $programs[2]
    $programs[0] = "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
    $programs[1] = "C:\Program Files (x86)\FreeCommander\FreeCommander.exe"

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

    $ausgabe =""
    For $i = UBound($programs) to 0 Step -1
    ShellExecute($programs[$i])
    sleep(10000)
    ProcessClose(
    Next

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

    natürlich noch nicht fertig. Meine Frage:
    Kann man den Process automatisch erkennen lassen zu dem Programm das oben gestartet wurde. Soll quasi eine Schleife werden
    deswegen muss ich das ja irgendwie in Variablen angeben.

  • [autoit]

    if ProcessExists("Dein Process") then ;action also das was du machen willst
    endif

    [/autoit]
  • damit bin ich ja an einen bestimmten process gebunden. und wenn cih das richtig sehe in einer schleife unpraktikabel

    es gibt ja die FUnktion WinGetProcess allerdings brauch ich dafür wiederum den Fensternamen. Das ist ein Teufelskreis xDD

  • na dem bekommst du doch ganz leicht mit dem WindowInfo von Autoit


    tielen von Firefox ist

    [autoit]

    Mozilla Firefox

    [/autoit]


    ok jetzt habe ich es verstanden
    und wie ist es wenn du mit wingethandle was machst ?

  • Moin,

    also wenn dann so:

    [autoit]


    For $i = UBound($programs) - 1 to 0 Step -1

    [/autoit]

    Ubound($array) gibt als Rückgabewert die Anzahl der insgesamten Elemente.

    Beispiel:

    [autoit]

    Dim $array[5]

    [/autoit]

    erzeugt ein Array mit 5 Elementen. Diese sind:

    [autoit]

    $array[0], $array[1], $array[2], $array[3], $array[4]

    [/autoit]

    (5 an der Zahl).

    Wenn du jetzt nur Ubound($array) nimmst, dann würde man als Index die 5 haben.
    Dieses Element existiert aber nicht und das Programm würde abstürzen.
    Deswegen ist die richtige Anwendung

    [autoit]

    Ubound($array) - 1

    [/autoit]

    Gruß

    Prajoss

    "Never touch a running System!"

  • danke prajoss

    zu dem rest, ich sehe das problem eher darin das immer wenn ich ne Win funktion aufrufe jedes mal ein fester Parameter eingetragen werden muss. Das heißt ich kann nicht dynamisch arbeiten aber kann natürlich acuh sein das ich was übersehen habe?

    Evtl ist es doch besser die Programme extra zu öffnen und schließen und dann copy&paste

  • Moin Tobitron,

    jetzt versteh ich dein Problem nicht genau.

    Du kannst doch bei Shellexute auch die Programmparameter übergeben.

    ShellExecute ( "filename" [, "parameters" [, "workingdir" [, "verb" [, showflag]]]] )
    Wenn du unterschiedliche Parameter zu den Programmen hast, dann lager die doch schon vorher in ein Array aus und mach das etwa so:

    [autoit]

    Dim $array[5][2]

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

    $array[0][0] = "Programmpfad1"
    $array[0][1] = "Parameter für Programm 1"

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

    $array[1][0] = "Programmpfad2"
    $array[1][1] = "Parameter für Programm 2"

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

    $array[2][0] = "Programmpfad3"
    $array[2][1] = "Parameter für Programm 3"

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

    $array[3][0] = "Programmpfad4"
    $array[3][1] = "Parameter für Programm 4"

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

    $array[4][0] = "Programmpfad5"
    $array[4][1] = "Parameter für Programm 5"

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

    $array[5][0] = "Programmpfad6"
    $array[5][1] = "Parameter für Programm 6"

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

    For $i = 0 To UBound($array) - 1

    ShellExecute($array[$i][0], $array[$i][1])

    ;Sonstiges

    Next

    [/autoit]

    Genauso könntest du auch noch ein Drittes Feld hinzufügen, in dem der Prozessname steht, also:

    [autoit]

    Dim $array[5][3]

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

    $array[0][0] = "Programmpfad1"
    $array[0][1] = "Parameter für Programm 1"
    $array[0][2] = "Prozessname1"

    [/autoit]

    Wichtig bei Arrays ist immer, dass der Index bei 0 anfängt (das verwirrt manchmal^^)

    Gruß

    Prajoss

    "Never touch a running System!"

  • Mach doch einfach ein 2D Array und speicher unter "0" deinen Pfad zur Exe und unter "1" den Namen also FF.exe zb, dass ist meiner Meinung nach der einfachste Weg das ganze in eine Schleife einzubauen.

    EDIT: // Dar war wohl jemand schneller :P

  • danke prajoss

    zu dem rest, ich sehe das problem eher darin das immer wenn ich ne Win funktion aufrufe jedes mal ein fester Parameter eingetragen werden muss. Das heißt ich kann nicht dynamisch arbeiten aber kann natürlich acuh sein das ich was übersehen habe?

    Evtl ist es doch besser die Programme extra zu öffnen und schließen und dann copy&paste


    Ich dachte du wüsstest welche Parameter du an die Anwendung übergeben musst.
    Ansonsten versteh ich dein Problem dann nicht ganz/richtig.

    Gruß

    Prajoss

    "Never touch a running System!"