Vereinfachen von wiederkehrenden Abläufen

  • Hallo liebe Gemeinde.

    Der Thomas schon wieder hier.
    Sitze vor der Hilfe von AutoIT und habe jetzt schon hinbeommen Variablen zu setzen
    (ob ich es richtig mache, weiß ich nicht aber es funtioniert :) )

    Ich habe einen Teil in menen Script den ich ca. 18 bis 20 mal wiederholen muss.
    Weiß aber gerade nicht wie. Hänge irgendwie an "Func" fest weiß aber nicht ob das richtig ist
    und wie ich es umsetzen könnte

    Die Zeilen 5 bis 18 im Script ändert sich nicht, muss ihn aber im Moment jedesmal komplett
    schreiben. (zur Info. Ich muss 18 bis 20 Clients eines Programmes starten , sind Messwaagen Laborgeräte)
    Kann ich aus den Zeilen 5 bis 18 irgendwie etwas festlegen wie eine Variable, die ich dann nur noch einfügen brauch?

    [autoit]

    Dim $userid = "Name", $password = "Passwort"
    SplashTextOn("Nexxis Client startet", "Methode BCS weight für ADEMOND4008.", 300, 150, -1, -1, 0, "", 20)
    Sleep(5000)
    SplashOff()
    Run("D:\programs\Labtronics\Nexxis v2.0\NexxisClient.exe")
    Sleep(2000)
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(1000)
    Send("!sl")
    WinActivate("[CLASS:Nexxis Logon]", "")
    Sleep(1000)
    ControlSetText("Nexxis Logon", "", "Edit1", $userid )
    sleep(1000)
    Send("{TAB}")
    ControlSetText("Nexxis Logon", "", "Edit2", $password )
    sleep(1000)
    ControlClick("Nexxis Logon", "", "Button1")
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(2000)
    Send("{DOWN 8}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(1000)
    Send("{DOWN 3}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(2000)
    WinSetState("Client - Nexxis", "", @SW_MINIMIZE)
    Sleep(5000)

    [/autoit]

    Vielen Dank für einen Tip und Grüße aus dem warmen Büro

    Einmal editiert, zuletzt von argonmember (2. Juli 2009 um 15:36)

  • schleifen ..

    ..

    do while ..

    while ..

    for ...


    ich würde for nehmen ..

    da du ja ne gewissen anzahl schon hast .. und keine bedingung ..

    functionen würde ich nicht nehmen ..

    .. klar kannst du das was gemacht werden soll in eine func schreiben .. aber dann must du diese trotzdem X* aufrufen ...

    lesbahrer ist es allemal ..

    bye

  • ZB würde ich es so testen,

    Spoiler anzeigen
    [autoit]

    $anzahl = 0
    While $anzahl <= 18
    Run("D:\programs\Labtronics\Nexxis v2.0\NexxisClient.exe")
    Sleep(2000)
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(1000)
    Send("!sl")
    WinActivate("[CLASS:Nexxis Logon]", "")
    Sleep(1000)
    ControlSetText("Nexxis Logon", "", "Edit1", $userid )
    sleep(1000)
    Send("{TAB}")
    ControlSetText("Nexxis Logon", "", "Edit2", $password )
    sleep(1000)
    ControlClick("Nexxis Logon", "", "Button1")
    WinActivate("[CLASS:Client - Nexxis]", "")

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

    $anzahl = $anzahl + 1
    WEnd

    [/autoit]

    Hoffe das stimmt so ev kann ein profi das mal absegenen

  • Hallo DummDumm

    Schon wieder Dane für deine schnelle Antwort.
    Ich glaube ich habe mich etwas falsch ausgedrüct. Entschuldigung.

    Insgesamt muss ich das Ganze (Zeile 1 bis 33) ca. 18 bis 20 mal ausführen.
    Die Werte von Zeile 19 bis 33 sind Werte die sich immer mal ändern.

    Zeile 5 bis 18 sind Werte die immer gleich bleiben, nur möchte ich irgendie soetwas haben wie

    $VARIABLE Zeile 5 bis 18

    das wenn ich das nächste mal Zeile 5 bis 18 schreibe, ich einfach nur $VARIABLE Zeile 5 bis 18 schreiben muss
    und fertig :)

    Ich hoffe ich könnte das gut genug ausdrücken.

    vivus
    Ich muss mir nochmal in der Hilfe.....WHILE...FOR usw usw durchlesen.
    So ganz komme ich noch nicht dahinter wie ich Deinen Vorschlag umsetzen soll.

    Aber auch Dir Danke

  • Hallo Heenzetchup.

    Ja...PW und User sind immer gleich, aber zur Sicherheit
    habe ich die in eine Variable gepackt...für denn Fall das es sich doch mal ändert.

  • So müsste er das alles 20 mal wiederholen.
    Wenn aber der eine Teil sich immermal ändert, muss es natürlich umgeschrieben werden.

    Spoiler anzeigen
    [autoit]

    Dim $userid = "Name", $password = "Passwort"
    $x=1

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

    While $x<=20
    SplashTextOn("Nexxis Client startet", "Methode BCS weight für ADEMOND4008.", 300, 150, -1, -1, 0, "", 20)
    Sleep(5000)
    SplashOff()

    Run("D:\programs\Labtronics\Nexxis v2.0\NexxisClient.exe")
    Sleep(2000)
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(1000)
    Send("!sl")
    WinActivate("[CLASS:Nexxis Logon]", "")
    Sleep(1000)
    ControlSetText("Nexxis Logon", "", "Edit1", $userid )
    sleep(1000)
    Send("{TAB}")
    ControlSetText("Nexxis Logon", "", "Edit2", $password )
    sleep(1000)
    ControlClick("Nexxis Logon", "", "Button1")
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(2000)
    Send("{DOWN 8}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(1000)
    Send("{DOWN 3}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(2000)
    WinSetState("Client - Nexxis", "", @SW_MINIMIZE)
    Sleep(5000)
    $x= $x+1
    WEnd

    [/autoit]
  • Nun Frage ich nochmal nach:

    Willst du das diese Zeilen 5-18 öfters ausgeführt werden?

    Oder willst du, das du eine Funktion hast die du im weiteren Script verlauf immer wieder einfügen kannst ohne den Ganzen text nochmal zu schreiben ??

    denn dann nimm

    Spoiler anzeigen
    [autoit]

    func _starten ()
    Run("D:\programs\Labtronics\Nexxis v2.0\NexxisClient.exe")
    Sleep(2000)
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(1000)
    Send("!sl")
    WinActivate("[CLASS:Nexxis Logon]", "")
    Sleep(1000)
    ControlSetText("Nexxis Logon", "", "Edit1", $userid )
    sleep(1000)
    Send("{TAB}")
    ControlSetText("Nexxis Logon", "", "Edit2", $password )
    sleep(1000)
    ControlClick("Nexxis Logon", "", "Button1")
    WinActivate("[CLASS:Client - Nexxis]", "")
    endfunc

    [/autoit]

    Wenn du nun die func aufrufst über tastendruck oder oder macht er immer wieder dieses was dort steht.

  • Zitat


    DummDumm

    Oder willst du, das du eine Funktion hast die du im weiteren Script verlauf immer wieder einfügen kannst ohne den Ganzen text nochmal zu schreiben ??


    genau das brauche ich.

    möchte einfach EINEN befehl haben...und die zeilen 5 bis 18 werden ausgeführt. :)
    Und diesen einen Befehl kann ich wenn ich Zeile 5 bis 18 wieder brauche einfach ins Script schreiben und fertig.

  • Siehe meinen vorhergehenden post hier, hatte es schon bearbeitet den Beitrag .

  • Hallo DummDumm

    Danke. Habe es gleich probiert. Es fängt an aber dann erscheint
    Line -1
    Error: Error parsinf function call.

    Vermutlich rufe ich die Funktion falsch auf.

    [autoit]

    Func _starten ()
    Run("D:\programs\Labtronics\Nexxis v2.0\NexxisClient.exe")
    Sleep(2000)
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(1000)
    Send("!sl")
    WinActivate("[CLASS:Nexxis Logon]", "")
    Sleep(1000)
    ControlSetText("Nexxis Logon", "", "Edit1", $userid )
    sleep(1000)
    Send("{TAB}")
    ControlSetText("Nexxis Logon", "", "Edit2", $password )
    sleep(1000)
    ControlClick("Nexxis Logon", "", "Button1")
    WinActivate("[CLASS:Client - Nexxis]", "")
    EndFunc
    Dim $userid = "User", $password = "Pass"
    SplashTextOn("Nexxis Client startet", "Methode BCS weight für ADEMOND4008.", 300, 150, -1, -1, 0, "", 20)
    Sleep(5000)
    SplashOff()
    _starten
    Sleep(2000)
    Send("{DOWN 8}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(1000)
    Send("{DOWN 3}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(2000)
    WinSetState("Client - Nexxis", "", @SW_MINIMIZE)
    Sleep(5000)

    [/autoit]
  • ja d ahast du nen fehler teste mal so:

    Spoiler anzeigen
    [autoit]

    Func _starten ()
    Run("D:\programs\Labtronics\Nexxis v2.0\NexxisClient.exe")
    Sleep(2000)
    WinActivate("[CLASS:Client - Nexxis]", "")
    Sleep(1000)
    Send("!sl")
    WinActivate("[CLASS:Nexxis Logon]", "")
    Sleep(1000)
    ControlSetText("Nexxis Logon", "", "Edit1", $userid )
    sleep(1000)
    Send("{TAB}")
    ControlSetText("Nexxis Logon", "", "Edit2", $password )
    sleep(1000)
    ControlClick("Nexxis Logon", "", "Button1")
    WinActivate("[CLASS:Client - Nexxis]", "")
    EndFunc
    Dim $userid = "User", $password = "Pass"
    SplashTextOn("Nexxis Client startet", "Methode BCS weight für ADEMOND4008.", 300, 150, -1, -1, 0, "", 20)
    Sleep(5000)
    SplashOff()
    _starten ()
    Sleep(2000)
    Send("{DOWN 8}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(1000)
    Send("{DOWN 3}")
    Sleep(1000)
    Send("{TAB 2}")
    Sleep(1000)
    Send("{SPACE}")
    Sleep(2000)
    WinSetState("Client - Nexxis", "", @SW_MINIMIZE)
    Sleep(5000)

    [/autoit]
  • Hallo Ihr beiden

    Danke...genau das wars.

    Die () hat gefehlt.

    Vielen Dank für eure Geduld.

    Ich bin einfach noch zu neu in der Materie und zu ungeübt was Programierung angeht.

    Danke