AutoIt übers netzwerk

  • Ihr habt mir heir schonmal so nett geholfen, daher nochmal zwei fragen:

    1) Ich habe verteilte Rechner, auf denen Lokal schon die AutoIT-Skripts funktionieren.
    für einen Weiteren Teil müsste ich diese Synchronisieren, oder von einem aus, ein anderes Ansteuern.
    Also Start Skript 1 auf PC1
    dann wartet Skript 1 und stoßst auf PC2 Skript 2 an.
    dann sagt dieses wieder skript 1 weiter
    dann wieder skript 2 weiter
    ....
    Geht das irgendwie ?


    2) kann man für Skript-Bereiche die Events (Move, MousClick, Send) langsamer machen,
    also zwischen diesen kurze pausen (im Millisekunden bis 1 Sekunden bereich?)
    Und zwar zwischen jedem Befehl, und nicht jedes mal denn Sleep() befehl?

  • sieh dir die Funktionen

    [autoit]

    TCPSend
    TCPRecv

    [/autoit]

    in der Hilfe an. Da ist ein komplettes beispiel dabei
    (mit server und client)

    2. spontan fällt mir nichts ein
    Was spricht gegen sleep?

  • sry dass ich vom thema abweiche aber das hat mir noch nie jemand erklärt was da der unterschied ist ( außer groß/klein buchtsaben )

    kannst du das mal erklären

  • Bitte korrigiere es zu:
    "AutoIt übers netzwerk"

    Das ist aber echt zu kleinlich. Rechtschreibfehler werden ja auch nicht immer gleich verbessert...

    sry dass ich vom thema abweiche aber das hat mir noch nie jemand erklärt was da der unterschied ist ( außer groß/klein buchtsaben )
    kannst du das mal erklären

    AutoIt = automatisiere es
    es hat nichts mit IT im Sinne von Informationstechnologie zu tun.
    deswegen kleines t.

  • Zitat

    ann man für Skript-Bereiche die Events (Move, MousClick, Send) langsamer machen,
    also zwischen diesen kurze pausen (im Millisekunden bis 1 Sekunden bereich?)

    Hi, schau mal bei

    [autoit]

    AutoItSetOption

    [/autoit]

    sämtliche *delay-Befehle durch, also MouseKlickDelay, SendKeyDelay usw

  • 2. spontan fällt mir nichts ein
    Was spricht gegen sleep?


    Das ich es Tippen muss?
    Nach jedem Mausklick.
    Nicht grad der Sinn des Befehls oder ?
    Eine Option, die die Befehle in "menschlicheren" Geschwindigkeit ablaufen lassen,
    wäre da zumindest in manchen Bereichen des Skripts sinnvoll.
    Mal schauen was MouseKlickDelay bringt.

    Das TCPSend, TCPRecv versteh ich noch nicht.
    Will eigentlich sowas in die Richtung machen:
    Server PC

    Code
    connect(client);
    do
    Send(client, $go); 
    waitForReceive(client, $go);
    do
    do
    Send(client1, $go);
    waitForReceive(client);
    do
    do

    Cleint PC

    Code
    connect(server);
    do
    waitForReceive(server);
    do
    Send(server);
    waitForReceive(server);
    do
    Send(server);

    Allerdings nicht klar wie es weiter geht.

  • Ich habe die sachen die du da geschrieben hast möglichst in AutoIt umgesetzt, es sind keine Funktionsfähingen Scripte sondern nur die Passenen Befehle zu deinen Vorgaben:

    Server
    [autoit]


    $IpAdresse = @IPAddress1

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

    TCPStartup() ;Startet TCP, muss immer vor der Benützung von TCP gemacht werden

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

    ; Deine erste Zeile---------------------------------------------
    $MainSocket = TCPListen($IpAdresse,1234)
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1
    ; Deine dritte Zeile---------------------------------------------
    TCPSend($ConnectedSocket,$go)
    ; Deine vierte Zeile---------------------------------------------
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = ""
    ; Deine siebte Zeile---------------------------------------------
    TCPSend($ConnectedSocket,$go)
    ; Deine achte Zeile---------------------------------------------
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = ""
    TCPCloseSocket($ConnectedSocket); schließt den TCP Socket
    TCPShutdown() ;Beendet TCP, sollte immer nach der Benützung von TCP gemacht werden

    [/autoit]
    Client
    [autoit]


    $IpAdresse = @IPAddress1;hier die Ip des Server hin

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

    TCPStartup() ;Startet TCP, muss immer vor der Benützung von TCP gemacht werden

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

    ; Deine erste Zeile---------------------------------------------
    $ConnectedSocket = TCPConnect($IpAdresse,1234)
    ; Deine dritte Zeile---------------------------------------------
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = ""
    ; Deine fünfte Zeile---------------------------------------------
    TCPSend($ConnectedSocket,"hier das was du senden möchtest")
    ; Deine sechste Zeile---------------------------------------------
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = ""
    TCPSend($ConnectedSocket,"hier das was du senden möchtest")

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

    TCPCloseSocket($ConnectedSocket); schließt den TCP Socket
    TCPShutdown() ;Beendet TCP, sollte immer nach der Benützung von TCP gemacht werden

    [/autoit]

    Aber warum willst du Mausklicks und Send in einer "menschlicheren Geschwindigkeit" ablaufen lassen?
    Vll solltest du dir nur für den fall die Regeln dieses Forums ansehen.

  • Danke,

    Ich habs mal angepasst und versucht zu starten.
    Aber am Server passiert gar nix und am Client kommt
    er bis zu Part 2, also schreibt "Client: Wait for order".

    Doch sonst nix....

    Server
    [autoit]


    $IpAdresse = @IPAddress1

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

    TCPStartup() ;Startet TCP, muss immer vor der Benützung von TCP gemacht werden
    $IpAdresse = "192.168.0.106" ; Client Adresse
    $MainSocket = TCPListen($IpAdresse,1234)
    Do
    $ConnectedSocket = TCPAccept($MainSocket)
    Until $ConnectedSocket <> -1

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

    ; Part 1 ---- Locale SetUp
    SplashTextOn("Prozess","Locale Part: Sever - Prepare Settings",400,200)
    Sleep(4000)
    ; Do something
    ; automated
    ; in the App to set up
    SplashOff()

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

    ; Order Client to Call
    SplashTextOn("Prozess","Send to Client order for Progress",400,200)
    Sleep(4000)
    $go = "progress"
    TCPSend($ConnectedSocket,$go)
    SplashOff()

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

    ; Part 2 ---- Waiting 4 progress
    SplashTextOn("Prozess","Waiting for progress",400,200)
    Sleep(4000)
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = "working"
    SplashOff()

    ; Part 3 --- Handle progress
    SplashTextOn("Prozess","Handle Progress",400,200)
    Sleep(12000)
    ; Do something
    ; automated
    ; to handle the Progress
    SplashOff()

    ; Part 4 --- Dismiss Client
    SplashTextOn("Prozess","Dismiss Client",400,200)
    Sleep(3000)
    SplashOff()
    $go "end"
    TCPSend($ConnectedSocket,$go)

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

    ; Part 5 --- Ending
    SplashTextOn("Prozess","End Programm",400,200)
    Sleep(5000)
    ; Do something
    ; automated
    ; to end Programm
    SplashOff()

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

    TCPCloseSocket($ConnectedSocket); schließt den TCP Socket
    TCPShutdown() ;Beendet TCP, sollte immer nach der Benützung von TCP gemacht werden

    [/autoit]
    Client
    [autoit]


    $IpAdresse = @IPAddress1;hier die Ip des Server hin

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

    TCPStartup() ;Startet TCP, muss immer vor der Benützung von TCP gemacht werden
    $IpAdresse = "192.168.0.105" ;Server Adresse
    $ConnectedSocket = TCPConnect($IpAdresse,1234)

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

    ; Part 1 ---- SetUp the Client
    SplashTextOn("Prozess","Locale Part 1: Client Prepare",400,200)
    Sleep(10000)
    ; Do something
    ; automated
    ; to prepare the App
    SplashOff()

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

    ; Part 2 --- Wait for Order
    SplashTextOn("Prozess","Client: Wait for order",400,200)
    Sleep(5000)
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = "progress"

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

    ; Part 3 --- Starting progress
    SplashOff()
    SplashTextOn("Prozess","Initiate Progress",400,200)
    Sleep(5000)
    ; Do something
    ; automated
    ; to start the progress
    SplashOff()
    TCPSend($ConnectedSocket,"working")

    ; Part 4 --- wait for End
    SplashTextOn("Prozess","Wait for End",400,200)
    Sleep(1000)
    Do
    $Recv = TCPRecv($ConnectedSocket,2000)
    Until $Recv = "end"
    SplashOff()


    ; Part 5 --- now Ending
    SplashTextOn("Prozess","Last steps: Shut down",400,200)
    Sleep(8000)
    ; Do something
    ; automated
    ; to end everything
    SplashOff()

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

    TCPCloseSocket($ConnectedSocket); schließt den TCP Socket
    TCPShutdown() ;Beendet TCP, sollte immer nach der Benützung von TCP gemacht werden

    [/autoit]

    Was habe ich wichtiges bei der erstellung der verbindung übersehen ?
    Und warum springt er beim Client einfach drüber ?
    (ich starte Server zuerst)


    Aber warum willst du Mausklicks und Send in einer "menschlicheren Geschwindigkeit" ablaufen lassen?


    Weils sonnst fürs Programm, das Automatisiert getestet werden soll zu schnell ist,
    und die GUI Elemente nicht da sind bevor geklickt wird.


    Vll solltest du dir nur für den fall die Regeln dieses Forums ansehen.


    Den Hinweis versteh ich nicht.

  • Wow jetzt schients problem los zu klappen!!!
    Ich finds toll das es leute wie dich gibt die einem wirklich weiter helfen!!!

    Kurze Frage noch:
    Wird beim Senden Automatisch gewartet auf den anderen ?
    So kommts mir vor, weil der Server schon angibt zu senden,
    obwohl der Client noch nicht beim empfangen ist,
    wenn der dann da ist gehts weiter ...
    das ist eh gut, wusste nur nicht das das scheinbar implizit geht!

  • Eine Frage hab ich jetzt doch auch noch.
    wie siehts mit mehreren Clients aus.
    Wie halte ich die Auseinander?

  • Du kannst dich genauso mit weiteren Clients Verbinden wie du es auch mit einem gemacht hast, nur musst du natürlich die "Socket-Kennungen" in unterschiedlichen Variablen abspeichern.

    AutoIt Script
    [autoit]


    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1,1234)
    Local $ConnectedSocket[3]
    For $i = 0 to 2
    Do
    $ConnectedSocket[$i] = TCPAccept($MainSocket)
    Until $ConnectedSocket[$i] <> -1
    next

    [/autoit]

    Hier in diesem Beispiel wartet der Server, statt auf eine Verbindung, auf drei. Wenn du etwas an einen bestimmen Client Senden möchtest nimmst du einfach die Variable in der seine Socket-Kennung gespeichert ist.


    AutoIt Script
    [autoit]


    TCPStartup()
    $MainSocket = TCPListen(@IPAddress1,1234)
    Local $ConnectedSocket[3]
    For $i = 0 to 2
    Do
    $ConnectedSocket[$i] = TCPAccept($MainSocket)
    Until $ConnectedSocket[$i] <> -1
    next

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

    TCPSend($ConnectedSocket[0],"Du bist ein Client")

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

    TCPSend($ConnectedSocket[1],"Du bist ein anderer Client")

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

    TCPSend($ConnectedSocket[2],"Und du bist der letzte Client")

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

    For $i = 0 to 2
    TCPCloseSocket($ConnectedSocket[$i])
    next
    TCPShutdown()

    [/autoit]
  • Hallo LGob,

    in was für einer Umgebung befindest du dich netzwerktechnisch überhaupt?
    ist das privat ( 2 pc's über switch) oder habt ihr einen windows server + clients netzwerk?

    warum soll client 1 ein script ausführen und danach jedesmal mit einem weiteren kommunizieren und das auch wieder zurück zum 1 client?
    sollen da daten abgeglichen werden (updater) oder wie kann man sich das vorstellen?

    wenn es ein updater werden soll, kannst du mit einer definierten versionsnummer arbeiten und die daten dann entsprechend kopieren! die update daten sollten dann immer an einer zentralen stelle liegen, von der sich alle cleints bedienen können!

    kannst es ja mal bissl genuer schreiben, was du vorhast! ;)

    gruß gmmg

  • Die AutoIt Skripts laufen auf Windows Maschinen

    Einmal editiert, zuletzt von LGob (11. Dezember 2012 um 02:34)