verschiedene Probleme mit gui und Dosbox

  • also habe eine gui. wo man ip username pass eingibt, und die connetet dann zu ner sql Datenbank

    nach dem das connetet hat kann man weiter befehle eingeben. aber hier weiß ich nciht weiter

    aber erstmal das script

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.2.4.9
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <Constants.au3>
    #include <file.au3>
    #include <array.au3>
    #include<File.au3>
    #include <GUIConstants.au3>
    #include <Process.au3>
    ;Gui erzeugen

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

    GUICreate("Gui",800,500)
    ;Ip,User, und PAsswort abfrae
    GUICtrlCreateLabel("IP",10,30)
    $ip1 = GUICtrlCreateEdit("",70,30,200,20,0)
    GUICtrlCreateLabel("User",10,70)
    $user1 = GUICtrlCreateEdit("",70,70,200,20,0)
    GUICtrlCreateLabel(" Passwort",10,110)
    $Pass1 = GUICtrlCreateEdit("",70,110,200,20,0)
    ;Buttons in Form von befehlen
    $verbinden = GUICtrlCreateButton("Verbinden", 130,140);Wagerechte;Höhe

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

    GUICtrlCreateLabel("Manueller Befehl",130,190)
    GUICtrlCreateEdit("",70,220,200)
    GUICtrlCreateButton("Senden",140,250)

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

    $endbutton = GUICtrlCreateButton ("Schließen",730,470)

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

    GUISetState(@SW_SHOW)

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

    dim $Array
    While 1
    $msg = GUIGetMsg()
    If $msg <> 0 Then
    $IP = GUICtrlRead($IP1)
    $user = GUICtrlRead($user1)
    $pass = GUICtrlRead($Pass1)
    Select
    ;Hile Abschnittl
    case $msg = $verbinden

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

    Global $text
    Global $command = "SQLcmd.exe "&$user&" "&$pass&" "&$ip


    ;Abfrage ob daten eingetragen wurden, Setze auf Iniligenz des users, das er gültige ip eingibt
    if $ip="" then
    MsgBox(0,"Achtung", "Es wurden keine IP eingetragen")
    $command=""
    EndIf

    if $user="" then
    MsgBox(0,"Achtung", "Es wurden kein Benutzername eingetragen")
    $command=""
    EndIf

    if $pass="" then
    MsgBox(0,"Achtung", "Es wurden kein Passwort eingetragen")
    $command=""
    EndIf

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

    $stream = Run(@ComSpec & ' /c ' & $command, '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    While 1
    $textline = StdoutRead($stream)
    $text = $text & @CRLF & $textline
    If @error Then ExitLoop
    WEnd

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

    MsgBox(0, "STDOUT read:", $text)

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

    Case $msg = $endbutton Or $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    EndIf
    Wend

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

    also wie kann ich wenn die der runbefehl erolgreich war, die verbindung steht noch nen anchließenden befehl nachschicken?

    Infos zu der SQLcmd
    http://msdn2.microsoft.com/de-de/library/ms162773.aspx

    möchte eben alles über die gui steuern

    2te frage

    wie kann ich die variable $text statt in der msgbox direkt in der gui verankern? diese sollte sich auch aktualliesieren können

    ...

    ich hoffe ihr habt mich verstanden, wenn nicht einfach fragen, weiß selber kaum wie ich es am besten erkläre ?(

    • Offizieller Beitrag

    Weitere Eingaben an die DosBox schicken sollte mit $STDIN_CHILD und StdinWrite gehen!

    Um den Text direkt in der GUI auszugeben, brauchst Du nur ein Label mit der entsprechenden Größe zu definieren und dann den Text mit GUICtrlSet hineinzuschreiben!

  • ich teste es mal durch, danke erstmal.

    man brauch eben nur die richtigen befehle zu wissen :)

    öhm in mom hänge ich bei den variablen

    also der run befehl rennt so

    [autoit]

    $stream = Run(@ComSpec & ' /c ' & $command, '', @SW_HIDE, $STDIN_CHILD + $STDERR_CHILD + $STDOUT_CHILD )

    [/autoit]

    wie muss da jetzt der StdinWrite aussehen?

    [autoit]

    StdinWrite($STDIN_CHILD,$MBS)

    [/autoit]


    wobei $MBS das befehl ist der von gui gelesen wird

    dannach kommt die func status um den das zu lesen was die box schreibt

    func status()

    $text = ""
    $textline = StdoutRead($stream)
    $text = $text & @CRLF & $textline

    GUICtrlCreateEdit($text,300,10,480,300);,BitOR($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY,$ES_MULTILINE))
    FileWrite("Log.txt",$text&@CRLF)


    oder ist das der falsche, weil sich nacher das script

    wenn ich es so anstelle hängt das sript

    Einmal editiert, zuletzt von devildevil3 (28. August 2007 um 20:29)

  • Hi!

    Vielleicht hilft dir folgendes Beispiel weiter:

    Spoiler anzeigen
    [autoit]

    Local Const $S_COMMAND = "ftp.exe"
    Local Const $I_PID = Run(@ComSpec & ' /c "' & $S_COMMAND & '"', @WorkingDir, @SW_HIDE, 7)
    StdinWrite($I_PID, "HELP")
    StdinWrite($I_PID)

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

    Local $s_stdout = ""
    While 1
    $s_stdout &= StdoutRead($I_PID)
    If @error Then ExitLoop
    WEnd

    MsgBox(0, "Debug", $s_stdout)

    [/autoit]


    Dein Aufruf von StdinWrite() war schon falsch, da da der erste Parameter die ProzessID des Run-Befehls sein muss. StdinWrite("PID") beendet den Stream.

  • mhh irgendwie peil ichs nicht ganz

    die run zeile hat jadie variable $Stream

    auf einen extre Button soll er einen befehl schicken müsste ja dann so aussehen

    [autoit]


    Local Const $stream = Run(@ComSpec & ' /c ' & $command, '', @SW_HIDE, $STDIN_CHILD + $STDERR_CHILD + $STDOUT_CHILD )

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

    status()

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

    Case $msg=$MBS

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

    StdinWrite($stream, $MB);Soll in das CMD schicken
    ;StdinWrite($stream) ;Beendet CMD?

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

    status(); ruft den output auf um infos n der gui zu erzeugen

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


    und die Funktion status()

    [autoit]

    func status()

    $text = ""
    $textline = StdoutRead($stream)
    $text = $text & @CRLF & $textline

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

    GUICtrlCreateEdit($text,300,10,480,300)
    FileWrite("Log.txt",$text&@CRLF)

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

    EndFunc

    [/autoit]

    wo steckt den nun der fehler, sehe da fast keinen unterschied?

    wenn ichs aber so aufrufe, freit die gui ein sobald ich den Manuellen Befehl Senden drücke
    wie ich es verstanden habe beendet StdinWrite($stream) es das cmd?

    mhh ok, habs wenn ich den befehl auf

    [autoit]

    Local Const $stream = Run(@ComSpec & ' /c ' & $command, '', @SW_HIDE,7)

    [/autoit]

    klappt es 8o, aber warum darf das nciht stehen

    [autoit]

    $STDIN_CHILD + $STDERR_CHILD + $STDOUT_CHILD

    [/autoit]
  • Hi!

    Dein Code war ja grausam. habe das Ganze mal so geschrieben, wie ich es machen würde (Wird bestimmt noch nicht funzen, aber poste mal, wo jetzt genau die Probleme sind mit meinem Code, dann kommen wir weiter!):

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt("GUICloseOnESC", 0)
    Opt("MustDeclareVars", 1)

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

    Local Const $S_LOGFILE = @ScriptDir & "\log.txt"
    Local $h_ipedit = -1, $h_useredit = -1, $h_passwdedit = -1, $h_connbt = -1, _
    $h_cmdedit = -1, $h_sendbt = -1, $h_endbt = -1, $h_statusedit = -1
    Local $s_ip = "", $s_user = "", $s_passwd = "", $s_stdout = ""
    Local $i_msg = 0, $i_pid = 0

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

    If FileExists($S_LOGFILE) Then FileDelete($S_LOGFILE)

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

    GUICreate("GUI", 800, 500)
    GUICtrlCreateLabel("IP", 10, 30)
    $h_ipedit = GUICtrlCreateInput("88.249.224.169", 70, 30, 200, 20)
    GUICtrlCreateLabel("User", 10, 70)
    $h_useredit = GUICtrlCreateInput("", 70, 70, 200, 20)
    GUICtrlCreateLabel("Passwort", 10, 110)
    $h_passwdedit = GUICtrlCreateInput("", 70, 110, 200, 20)
    $h_connbt = GUICtrlCreateButton("Verbinden", 130, 140)
    GUICtrlCreateLabel("Manueller Befehl", 130, 190)
    $h_cmdedit = GUICtrlCreateInput("", 70, 220, 200, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_sendbt = GUICtrlCreateButton("Senden", 140, 250)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_endbt = GUICtrlCreateButton("Schließen", 730, 470)
    GUICtrlCreateLabel("Warte auf Daten...", 300, 10, 400, 420)
    $h_statusedit = GUICtrlCreateEdit("", 300, 10, 480, 300)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState()

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

    While 1
    $i_msg = GUIGetMsg()
    Select
    Case $i_msg = $h_connbt
    $s_ip = GUICtrlRead($h_ipedit)
    If Not $s_ip Then
    MsgBox(48, "Achtung", "Es wurden keine IP eingetragen")
    ContinueCase
    EndIf
    $s_user = GUICtrlRead($h_useredit)
    If Not $s_user Then
    MsgBox(48, "Achtung", "Es wurden kein Benutzername eingetragen")
    ContinueCase
    EndIf
    $s_passwd = GUICtrlRead($h_passwdedit)
    If Not $s_passwd Then
    MsgBox(48, "Achtung", "Es wurden kein Passwort eingetragen")
    ContinueCase
    EndIf
    If Not Ping($s_ip) Then
    MsgBox(48, "Achtung", "Die eingetragene IP ist offline")
    ContinueCase
    EndIf

    GUICtrlSetData($h_statusedit, "Verarbeite")
    $i_pid = Run(@ComSpec & " /c " & "SQLcmd.exe " & $s_user & " " & $s_passwd & " " & $s_ip, @WorkingDir, @SW_HIDE, 6)
    If @error Then
    MsgBox(48, "Achtung", "SQLcmd.exe konnte nicht gestartet werden")
    ContinueCase
    EndIf
    While 1
    $s_stdout &= StdoutRead($i_pid)
    If @error Then ExitLoop
    WEnd
    GUICtrlSetState($h_sendbt, $GUI_ENABLE)
    GUICtrlSetState($h_endbt, $GUI_ENABLE)
    GUICtrlSetState($h_statusedit, $GUI_SHOW)
    GUICtrlSetData($h_statusedit, $s_stdout)
    FileWrite($S_LOGFILE, $s_stdout)
    Case $i_msg = $h_sendbt
    StdinWrite($i_pid, GUICtrlRead($h_cmdedit))
    StdinWrite($i_pid)
    While 1
    $s_stdout &= StdoutRead($i_pid)
    If @error Then ExitLoop
    WEnd
    GUICtrlSetData($h_statusedit, $s_stdout)
    FileWrite($S_LOGFILE, $s_stdout)
    Case $i_msg = $h_endbt Or $i_msg = $GUI_EVENT_CLOSE
    ProcessClose("SQLcmd.exe")
    Exit
    EndSelect
    WEnd

    [/autoit]
  • danke für deine Hilfe

    ja ist das erstemal das ich so was großes hier mache, wie ich sehe hast wirklich komplett geändert.

    aber schaut so einiges besser aus

    nur ein Problem

    sobald ich die ip Benutzername und Passwort (indemfall ises einfach "" für kein passwort)

    hängt er Status ist da immer noch warte auf Daten.

  • Poste mal die EXE-Datei, damit kommen wir am ehesten weiter. Benutz mal folgenden Code (waren noch zwei Dinge falsch):

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>
    Opt("GUICloseOnESC", 0)
    Opt("MustDeclareVars", 1)

    Local Const $S_LOGFILE = @ScriptDir & "\log.txt"
    Local $h_ipedit = -1, $h_useredit = -1, $h_passwdedit = -1, $h_connbt = -1, _
    $h_cmdedit = -1, $h_sendbt = -1, $h_endbt = -1, $h_statusedit = -1
    Local $s_ip = "", $s_user = "", $s_passwd = "", $s_stdout = ""
    Local $i_msg = 0, $i_pid = 0

    If FileExists($S_LOGFILE) Then FileDelete($S_LOGFILE)

    GUICreate("GUI", 800, 500)
    GUICtrlCreateLabel("IP", 10, 30)
    $h_ipedit = GUICtrlCreateInput("88.249.224.169", 70, 30, 200, 20)
    GUICtrlCreateLabel("User", 10, 70)
    $h_useredit = GUICtrlCreateInput("", 70, 70, 200, 20)
    GUICtrlCreateLabel("Passwort", 10, 110)
    $h_passwdedit = GUICtrlCreateInput("", 70, 110, 200, 20)
    $h_connbt = GUICtrlCreateButton("Verbinden", 130, 140)
    GUICtrlCreateLabel("Manueller Befehl", 130, 190)
    $h_cmdedit = GUICtrlCreateInput("", 70, 220, 200, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_sendbt = GUICtrlCreateButton("Senden", 140, 250)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_endbt = GUICtrlCreateButton("Schließen", 730, 470)
    GUICtrlCreateLabel("Warte auf Daten...", 300, 10, 400, 420)
    $h_statusedit = GUICtrlCreateEdit("", 300, 10, 480, 300)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState()

    While 1
    $i_msg = GUIGetMsg()
    Select
    Case $i_msg = $h_connbt
    $s_ip = GUICtrlRead($h_ipedit)
    If Not $s_ip Then
    MsgBox(48, "Achtung", "Es wurden keine IP eingetragen")
    ContinueCase
    EndIf
    $s_user = GUICtrlRead($h_useredit)
    If Not $s_user Then
    MsgBox(48, "Achtung", "Es wurden kein Benutzername eingetragen")
    ContinueCase
    EndIf
    $s_passwd = GUICtrlRead($h_passwdedit)
    ;~ If Not $s_passwd Then
    ;~ MsgBox(48, "Achtung", "Es wurden kein Passwort eingetragen")
    ;~ ContinueCase
    ;~ EndIf
    If Not Ping($s_ip) Then
    MsgBox(48, "Achtung", "Die eingetragene IP ist offline")
    ContinueCase
    EndIf

    GUICtrlSetData($h_statusedit, "Verarbeite")
    $i_pid = Run(@ComSpec & " /c " & "SQLcmd.exe " & $s_user & " " & $s_passwd & " " & $s_ip, @WorkingDir, @SW_HIDE, 7)
    If @error Then
    MsgBox(48, "Achtung", "SQLcmd.exe konnte nicht gestartet werden")
    ContinueCase
    EndIf
    ;~ Hier muss etwas angepasst werden
    While 1
    $s_stdout &= StdoutRead($i_pid)
    If @error Then ExitLoop
    WEnd
    GUICtrlSetState($h_sendbt, $GUI_ENABLE)
    GUICtrlSetState($h_endbt, $GUI_ENABLE)
    GUICtrlSetState($h_statusedit, $GUI_SHOW)
    GUICtrlSetData($h_statusedit, $s_stdout)
    FileWrite($S_LOGFILE, $s_stdout)
    Case $i_msg = $h_sendbt
    StdinWrite($i_pid, GUICtrlRead($h_cmdedit))
    StdinWrite($i_pid)
    ;~ Hier muss etwas angepasst werden
    While 1
    $s_stdout &= StdoutRead($i_pid)
    If @error Then ExitLoop
    WEnd
    GUICtrlSetData($h_statusedit, $s_stdout)
    FileWrite($S_LOGFILE, $s_stdout)
    Case $i_msg = $h_endbt Or $i_msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]
  • sers, Programm liegt in deinen pm fach,

    was ich bis jetzt beobachtet habe ist, nachdem der ping erfolgreich war, und das Programm gestartet wird, sich die gui aufhängt, wenn man in der while schleife eine msgbox eingebaut, bekommt man zwar wieder ein teil des Inhalts, aber gleich dannach hängt es, also muss dort irgendwo ein kleiner Fehler sein, der mir nicht auffällt

    grüße

  • Also, bei mir klappt das soweit. Habe natürlich keine SQL-Instanz laufen, weswegen ein Error zurückgegeben wird. Gehe ich Recht in der Annahme, dass wenn Du eine Verbindung aufgebaut hast (manuell mit der EXE) das Programm neue Eingaben erwartet? Dann musst Du die StdIn anpassen, da er aus der While Schleife nicht mehr herauskommt. Versuch mal folgendes:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GUIConstants.au3>
    Opt("GUICloseOnESC", 0)
    Opt("MustDeclareVars", 1)

    Local Const $S_LOGFILE = @ScriptDir & "\log.txt"
    Local $h_ipedit = -1, $h_useredit = -1, $h_passwdedit = -1, $h_connbt = -1, _
    $h_cmdedit = -1, $h_sendbt = -1, $h_endbt = -1, $h_statusedit = -1
    Local $s_ip = "", $s_user = "", $s_passwd = "", $s_stdout = ""
    Local $i_msg = 0, $i_pid = 0

    If FileExists($S_LOGFILE) Then FileDelete($S_LOGFILE)

    GUICreate("GUI", 800, 500)
    GUICtrlCreateLabel("IP", 10, 30)
    $h_ipedit = GUICtrlCreateInput("88.249.224.169", 70, 30, 200, 20)
    GUICtrlCreateLabel("User", 10, 70)
    $h_useredit = GUICtrlCreateInput("", 70, 70, 200, 20)
    GUICtrlCreateLabel("Passwort", 10, 110)
    $h_passwdedit = GUICtrlCreateInput("", 70, 110, 200, 20)
    $h_connbt = GUICtrlCreateButton("Verbinden", 130, 140)
    GUICtrlCreateLabel("Manueller Befehl", 130, 190)
    $h_cmdedit = GUICtrlCreateInput("", 70, 220, 200, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_sendbt = GUICtrlCreateButton("Senden", 140, 250)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $h_endbt = GUICtrlCreateButton("Schließen", 730, 470)
    GUICtrlCreateLabel("Warte auf Daten...", 300, 10, 400, 420)
    $h_statusedit = GUICtrlCreateEdit("", 300, 10, 480, 300)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState()

    While 1
    $i_msg = GUIGetMsg()
    Select
    Case $i_msg = $h_connbt
    $s_ip = GUICtrlRead($h_ipedit)
    If Not $s_ip Then
    MsgBox(48, "Achtung", "Es wurden keine IP eingetragen")
    ContinueCase
    EndIf
    $s_user = GUICtrlRead($h_useredit)
    If Not $s_user Then
    MsgBox(48, "Achtung", "Es wurden kein Benutzername eingetragen")
    ContinueCase
    EndIf
    $s_passwd = GUICtrlRead($h_passwdedit)
    ;~ If Not $s_passwd Then
    ;~ MsgBox(48, "Achtung", "Es wurden kein Passwort eingetragen")
    ;~ ContinueCase
    ;~ EndIf
    If Not Ping($s_ip) Then
    MsgBox(48, "Achtung", "Die eingetragene IP ist offline")
    ContinueCase
    EndIf

    GUICtrlSetData($h_statusedit, "Verarbeite")
    $i_pid = Run(@ComSpec & " /c " & "SQLcmd.exe " & $s_user & " " & $s_passwd & " " & $s_ip, @WorkingDir, @SW_HIDE, 7)
    If @error Then
    MsgBox(48, "Achtung", "SQLcmd.exe konnte nicht gestartet werden")
    ContinueCase
    EndIf
    $s_stdout = StdoutRead($i_pid)
    GUICtrlSetState($h_cmdedit, $GUI_ENABLE)
    GUICtrlSetState($h_sendbt, $GUI_ENABLE)
    GUICtrlSetState($h_statusedit, $GUI_SHOW)
    GUICtrlSetData($h_statusedit, $s_stdout)
    FileWrite($S_LOGFILE, $s_stdout)
    Case $i_msg = $h_sendbt
    StdinWrite($i_pid, GUICtrlRead($h_cmdedit))
    StdinWrite($i_pid)
    While 1
    $s_stdout &= StdoutRead($i_pid)
    If @error Then ExitLoop
    WEnd
    GUICtrlSetData($h_statusedit, $s_stdout)
    FileWrite($S_LOGFILE, $s_stdout)
    Case $i_msg = $h_endbt Or $i_msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]
  • also, er kann eine Verbindung aufbauen, nur ist die Ausgabe ist noch unvollständig.

    ok, dann nochmal was gesendet

    dann wird es verrückt

    er hängt, dann kommt warte auf Daten, er verbindet sich wieder, dann ohne mein Zutun, kommt wieder Warte auf Daten und er verbindet sich nochmals, bzw steht es so in den output ?( ?(

    Glaube das es an Script noch liegt, man kann mit den Programm nicht nochmal verbinden, aber wo soll da der Fehler liegen

    ist mir ein Rätsel warum es nochmal von oben anfängt ?(

  • Hi, ok. Hab Dir mal was mit FTP.exe gemacht (kann mit Deiner Applikation wie geasgt nix anfangen. Beim Starten der Verbindung hab ich das Gleiche Problem wie Du, weiß im moment auch nicht, wie man da an der Standardoutput kommt. Befehle schicken geht aber! (Nur den auskommentierten Teil müsstest Du abändern!)
    FTP.exe GUI v0.1:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt("MustDeclareVars", 1)

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

    main()

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

    Func main()
    Local $h_gui = -1, $h_hostinp = -1, $h_openbt = -1, $h_cmdinp = -1, $h_sendcmdbt = -1, $h_outputedit = -1
    Local $i_pid = 0
    Local $s_host = "", $s_stdout = "", $s_cmd = ""

    $h_gui = GUICreate("FTP.exe GUI", 320, 240)
    $h_hostinp = GUICtrlCreateInput("ftp.cs.tu-berlin.de", 10, 10, 100, 20)
    $h_openbt = GUICtrlCreateButton("&Open", 10, 40, 60, 20)
    $h_cmdinp = GUICtrlCreateInput("", 10, 80, 100, 20)
    GUICtrlSetState(-1, $GUI_HIDE)
    $h_sendcmdbt = GUICtrlCreateButton("&Send", 10, 120, 60, 20)
    GUICtrlSetState(-1, $GUI_HIDE)
    $h_outputedit = GUICtrlCreateEdit("", 120, 10, 190, 220, $WS_HSCROLL + $WS_HSCROLL + $ES_MULTILINE + $ES_READONLY)
    GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW, $h_gui)
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    GUIDelete($h_gui)
    Exit
    Case $h_openbt
    $s_host = GUICtrlRead($h_hostinp)
    If $s_host Then
    $i_pid = Run(@ComSpec & " /c ftp.exe -A " & $s_host, @SystemDir, @SW_HIDE, 7)
    If Not @error Then
    GUICtrlSetState($h_hostinp, $GUI_DISABLE)
    GUICtrlSetState($h_openbt, $GUI_DISABLE)
    GUICtrlSetState($h_cmdinp, $GUI_SHOW)
    GUICtrlSetState($h_sendcmdbt, $GUI_SHOW)
    GUICtrlSetState($h_outputedit, $GUI_SHOW)
    ;~ While 1
    ;~ $s_stdout &= StdoutRead($I_PID)
    ;~ If @error Then ExitLoop
    ;~ WEnd
    ;~ GUICtrlSetData($h_outputedit, $s_stdout)
    EndIf
    EndIf
    Case $h_sendcmdbt
    $s_cmd = GUICtrlRead($h_cmdinp)
    If $s_cmd Then
    GUICtrlSetState($h_cmdinp, $GUI_DISABLE)
    GUICtrlSetState($h_sendcmdbt, $GUI_DISABLE)
    StdinWrite($i_pid, $s_cmd)
    StdinWrite($i_pid)
    While 1
    $s_stdout &= StdoutRead($i_pid)
    If @error Then ExitLoop
    WEnd
    GUICtrlSetData($h_outputedit, $s_stdout)
    GUICtrlSetState($h_cmdinp, $GUI_ENABLE)
    GUICtrlSetState($h_sendcmdbt, $GUI_ENABLE)
    EndIf
    EndSwitch
    WEnd
    EndFunc ;==>main

    [/autoit]