StdoutRead auslesen per Button

  • Hi
    wenn ich meine Giu starte beginnt der StdoutRead sofort den FCsServerLauncher auszulesen, kann dann im Input einen Befehl eingeben und senden.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GuiEdit.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 835, 439, 192, 124)
    $Edit1 = GUICtrlCreateEdit("", 419, 29, 398, 387)
    $Edit2 = GUICtrlCreateEdit("", 15, 215, 398, 200)
    $Button1 = GUICtrlCreateButton("Senden", 151, 60, 75, 25)
    $Input1 = GUICtrlCreateInput("", 149, 30, 222, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $fc2 = Run("C:\Program Files (x86)\Ubisoft\Far Cry 2\bin\FC2ServerLauncher.exe", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD )

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    $read = GUICtrlRead($Input1)
    WinActivate("[Class:ConsoleWindowClass]")
    WinWaitActive ("[Class:ConsoleWindowClass]")
    Send($read&"{Enter}")

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

    EndSwitch

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

    $line = StdoutRead($fc2)
    If @error Then ExitLoop
    If $line <> "" Then
    GUICtrlSetData($Edit1,"" & $line,1 )

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

    EndIf
    WEnd
    While 1
    $line = StderrRead($fc2)
    If @error Then ExitLoop
    ConsoleWrite("STDERR read:"& $line&1)
    WEnd

    [/autoit]


    Nun habe ich versucht den StdoutRead Prozess auch per Button zu starten, hab ich zwar geschafft aber leider funktioniert der Send Button nicht mehr, kann keine Befehle mehr senden.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GuiEdit.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 835, 439, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 26, 28, 75, 25)
    $Edit1 = GUICtrlCreateEdit("", 419, 29, 398, 387)
    $Edit2 = GUICtrlCreateEdit("", 15, 215, 398, 200)
    $Button2 = GUICtrlCreateButton("Button2", 151, 60, 75, 25)
    $Input1 = GUICtrlCreateInput("", 149, 30, 222, 21)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Start()

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

    Case $Button2
    $read = GUICtrlRead($Input1)
    WinActivate("[Class:ConsoleWindowClass]")
    WinWaitActive("[Class:ConsoleWindowClass]")
    Send($read & "{Enter}")
    EndSwitch

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

    WEnd

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

    Func Start()
    $fc2 = Run("C:\Program Files (x86)\Ubisoft\Far Cry 2\bin\FC2ServerLauncher.exe", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    $line = StdoutRead($fc2)
    If @error Then ExitLoop
    If $line <> "" Then
    GUICtrlSetData($Edit1, "" & $line, 1)

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

    EndIf
    WEnd
    EndFunc ;==>Start

    [/autoit]


    Was mache ich falsch?

    Einmal editiert, zuletzt von VinceA (19. April 2013 um 21:52)

  • Also, bei deinem erste Skript, bringt diese Schleife:

    [autoit]

    While 1
    $line = StderrRead($fc2)
    If @error Then ExitLoop
    ConsoleWrite("STDERR read:"& $line&1)
    WEnd

    [/autoit]

    gar nix. Das Skript befindet sich noch in der Hauptschleife und diese 2. wird nicht ausgeführt.

    Beim 2. Skript das gleiche. Diese Schleife in der Funktion:

    [autoit]

    While 1
    $line = StdoutRead($fc2)
    If @error Then ExitLoop
    If $line <> "" Then
    GUICtrlSetData($Edit1, "" & $line, 1)

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

    EndIf
    WEnd

    [/autoit]

    Hält die Funktion auf, d.h. es verlässt die Funktion nicht mehr und die Hauptschleife wird nicht mehr weiter ausgeführt.


    So jetzt weisste, was du falsch machst ;) (Die anderen Dinge mal außen vor gelassen)

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

    2 Mal editiert, zuletzt von Orion (17. April 2013 um 20:04)

  • Ok den 1. Script hab ich korrigiert.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GuiEdit.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 835, 439, 192, 124)
    $Edit1 = GUICtrlCreateEdit("", 419, 29, 398, 387)
    $Edit2 = GUICtrlCreateEdit("", 15, 215, 398, 200)
    $Button1 = GUICtrlCreateButton("Senden", 151, 60, 75, 25)
    $Input1 = GUICtrlCreateInput("", 149, 30, 222, 21)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    $fc2 = Run("C:\Program Files (x86)\Ubisoft\Far Cry 2\bis\FC2ServerLauncher.exe", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    $read = GUICtrlRead($Input1)
    WinActivate("[Class:ConsoleWindowClass]")
    WinWaitActive("[Class:ConsoleWindowClass]")
    Send($read & "{Enter}")

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

    EndSwitch

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

    $line = StdoutRead($fc2)
    If @error Then ExitLoop
    If $line <> "" Then
    GUICtrlSetData($Edit1, "" & $line, 1)

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

    EndIf
    $line = StderrRead($fc2)
    If @error Then ExitLoop
    ;~ ConsoleWrite("STDERR read:" & $line & 1)
    WEnd

    [/autoit]


    Beim 2. Script habe ich jetzt folgendes probiert.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GuiEdit.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 835, 439, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 26, 28, 75, 25)
    $Edit1 = GUICtrlCreateEdit("", 419, 29, 398, 387)
    $Edit2 = GUICtrlCreateEdit("", 15, 215, 398, 200)
    $Button2 = GUICtrlCreateButton("Button2", 151, 60, 75, 25)
    $Input1 = GUICtrlCreateInput("", 149, 30, 222, 21)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    $fc2 = Run("C:\Program Files (x86)\Ubisoft\Far Cry 2\bin\FC2ServerLauncher.exe", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Start()

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

    Case $Button2
    $read = GUICtrlRead($Input1)
    WinActivate("[Class:ConsoleWindowClass]")
    WinWaitActive("[Class:ConsoleWindowClass]")
    Send($read & "{Enter}")
    EndSwitch

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

    WEnd

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

    Func Start()

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

    $line = StdoutRead($fc2)
    If @error Then Exit
    If $line <> "" Then
    GUICtrlSetData($Edit1, "" & $line, "")
    EndIf
    $line = StderrRead($fc2)
    If @error Then Exit
    ;~ ConsoleWrite("STDERR read:" & $line & 1)

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

    EndFunc ;==>Start

    [/autoit]


    Aber leider funktioniert es nicht so wie ich es wollte.
    Ich kann mit Button1 den StdoutRead Prozess starten aber leider muss ich den Button 3 mal drücken bis er alles ausgelesen hat. Button 2 funktioniert, kann befehle senden aber auch hier muss ich aber dann Button 1 drücken damit ich es in Edit1 sehen kann.
    Was kann ich machen das wenn ich auf den Button1 klicke, der StdoutRead Prozess endlos ausliest bis ich das Programm schliesse?

    2 Mal editiert, zuletzt von VinceA (19. April 2013 um 21:55)

  • Schau dir mal

    [autoit]

    AdLibRegister

    [/autoit]

    an ;)
    Damit kannst du eine Funktion alle x Millisekunden aufrufen

    Wenn du noch mehr Fragen hast/Hilfe brauchst dann frag nur :)

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • :) Super mit AdLibRegister hat es geklappt aber leider startet der Server Launcher bevor ich den Button1 gedrückt habe. :(

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GuiEdit.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 835, 439, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 26, 28, 75, 25)
    $Edit1 = GUICtrlCreateEdit("", 419, 29, 398, 387)
    $Edit2 = GUICtrlCreateEdit("", 15, 215, 398, 200)
    $Button2 = GUICtrlCreateButton("Button2", 151, 60, 75, 25)
    $Input1 = GUICtrlCreateInput("", 149, 30, 222, 21)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    $fc2 = Run("C:\Program Files (x86)\Ubisoft\Far Cry 2\bin\FC2ServerLauncher.exe", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    Start()

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

    Case $Button2
    $read = GUICtrlRead($Input1)
    WinActivate("[Class:ConsoleWindowClass]")
    WinWaitActive("[Class:ConsoleWindowClass]")
    Send($read & "{Enter}")
    EndSwitch

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

    WEnd

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

    Func Start()
    AdlibRegister("Start")

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

    $line = StdoutRead($fc2)
    If @error Then Exit
    If $line <> "" Then
    GUICtrlSetData($Edit1, "" & $line, 1)
    EndIf
    $line = StderrRead($fc2)
    If @error Then Exit
    ;~ ConsoleWrite("STDERR read:" & $line & 1)

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

    EndFunc ;==>Start

    [/autoit]

    Wie kann ich vehindern dass das Programm startet bevor ich Button1 geklickt habe?

    http://translation.autoit.de/onlinehilfe/fu…libRegister.htm

  • Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Constants.au3>
    #include <GuiEdit.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 835, 439, 192, 124)
    $Button1 = GUICtrlCreateButton("Button1", 26, 28, 75, 25)
    $Edit1 = GUICtrlCreateEdit("", 419, 29, 398, 387)
    $Edit2 = GUICtrlCreateEdit("", 15, 215, 398, 200)
    $Button2 = GUICtrlCreateButton("Button2", 151, 60, 75, 25)
    $Input1 = GUICtrlCreateInput("", 149, 30, 222, 21)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button1
    $fc2 = Run("C:\Program Files (x86)\Ubisoft\Far Cry 2\bin\FC2ServerLauncher.exe", @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
    AdlibRegister("Start")

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

    Case $Button2
    $read = GUICtrlRead($Input1)
    WinActivate("[Class:ConsoleWindowClass]")
    WinWaitActive("[Class:ConsoleWindowClass]")
    Send($read & "{Enter}")
    EndSwitch

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

    WEnd

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

    Func Start()
    $line = StdoutRead($fc2)
    If @error Then Exit
    If $line <> "" Then
    GUICtrlSetData($Edit1, "" & $line, 1)
    EndIf
    $line = StderrRead($fc2)
    If @error Then Exit
    ;~ ConsoleWrite("STDERR read:" & $line & 1)

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

    EndFunc ;==>Start

    [/autoit]

    ;)

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)