UDF - AutoIt Scripte miteinander kommunizieren lassen

  • Hallo,

    Hier mla eine kleine UDF von mir, mit der zwei AutoIt Scripte Daten austauschen können :)
    habe direkt mal zwei kleine Testprogramme dazugepackt, damit ihr Sie sofort testen könnt. Habt ihr noch Verbesserungsvorschläge? :) Würde mich über Feedback freuen :)

    UDF

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #NoTrayIcon

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

    #cs
    by Jonathan - http://www.autoit.de

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

    Erklärung:

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

    Funktion senden:
    senden($data,$name)
    $data = zu verschickende Daten
    $name = Name der Daten. möglichst ausgefallen, NUR buchstaben / KEINE Sonderzeichen & Leerzeichen !!!!!

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

    Funktion empfangen:
    empfangen($name[,$frei])
    $name = der unter senden verwendete Datenname
    $frei = Daten nach dem Empfangen freigeben / Löschen
    #ce

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

    Func senden($data,$name) ;Funktion um Daten zu Senden

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

    GUICreate($name) ; Erstellt ein GUI-Fenster um Daten Freizugeben

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

    GUICtrlCreateLabel($data, 10, 30)

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

    GUISetState(@SW_HIDE)
    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    EndFunc

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

    func empfangen($name,$frei) ; Funktion um Daten zu empfangen

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

    If $frei = True Then ; Wenn Daten nach dem Abrufen Freigegeben werden sollen.
    $daten = ControlGetText($name,"",3); Daten abrufen
    WinClose($name); Fenster schließen. || Freigabe

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

    Else ; Wenn nur Daten abgerufen werden sollen

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

    $daten = ControlGetText($name,"",3);Daten abrufen
    EndIf

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

    Return($daten); Daten zurückgeben

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

    EndFunc

    [/autoit]


    Tesprogramm Senden:

    Spoiler anzeigen
    [autoit]

    #include <scriptconnect.au3>

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

    $daten = "hallo welt" ; Sendende Daten festlegen
    $name = "abcdefg" ; Datenname Festlegen, um Daten später wiederzufinden

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

    senden($daten,$name) ; Daten Senden

    [/autoit]

    TestProgramm Empfangen:

    Spoiler anzeigen
    [autoit]

    #include <scriptconnect.au3>

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

    $name = "abcdefg" ; Der im Senden Testscript vorgegebene Name

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

    ;;;;;;;;;; Beispiel ;;;;;;;;;;;;;;

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

    $Daten = empfangen($name,True) ; Daten Abrufen, danach Daten freigeben

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

    MsgBox(64,"Empfangene Daten",$Daten)

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    [/autoit]

    Und einmal als Downlaod für die ganz faulen angehängt :)

    • Offizieller Beitrag

    Heyho,

    Auch eine nette Idee ;) Ich mache es meistens immer so: Wenn ich Script A habe, das Script B startet lasse ich Script A immer den stdout-stream von Script B auslesen. Script B kann dann via ConsoleWrite daten an Script A übergeben. Ne andere Möglichkeit ist auch die Funktion EnvSet und EnvGet die globale System Variablen setzt.

    Nett wäre eventuell noch, wenn du ein OnEvent hinbekommen würdest. Also wenn Script A etwas zu Script B sendet bemerkt Script B das sofort (egal was Script B grade macht). Da du ja sowieso mit GUIs arbeit könntest du dir mal GuiRegisterMsg für Script B und _SendMessage für Script A angucken ;)

    Gruß
    Spider