Hallo zusammen,
ich habe hier folgendes Programm gebastelt:
Spoiler anzeigen
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Constants.au3>
Global $GUI[20]
[/autoit] [autoit][/autoit] [autoit]$GUI[0] = GUICreate("Test", 600, 320, @DesktopWidth/2-300, @DesktopHeight/2-160, -1)
$GUI[1] = GUICtrlCreateEdit("", 20, 20, 560, 260, $ES_READONLY + $ES_MULTILINE + $ES_AUTOVSCROLL)
$GUI[2] = GUICtrlCreateButton("Start", 220, 290, 60, 20)
$GUI[3] = GUICtrlCreateButton("Stop", 320, 290, 60, 20)
GUISetState()
[/autoit] [autoit][/autoit] [autoit]$text = ""
[/autoit] [autoit][/autoit] [autoit]While 1
$GUI[19] = GUIGetMsg($GUI[0])
Select
Case $GUI[19] = $GUI[2]
$cmd = Run(@ComSpec & " /c ping localhost -t", @SystemDir, @SW_HIDE, $STDOUT_CHILD)
While 1
$line = StdoutRead($cmd)
If @error Then ExitLoop
$text = $text & $line
GUICtrlSetData($GUI[1], $text)
Sleep(500)
WEnd
Case $GUI[19] = $GUI[3]
; Programm beenden
Case $GUI[19] = $GUI_EVENT_CLOSE
Exit
EndSelect
WEnd
Ich erhalte also ein GUI mit Edit-Feld sowie einem Start- und einem Stop-Button. Bei einem Klick auf "Start" wird ein dauerhafter Ping auf den localhost ausgeführt, dessen Output in das Edit-Feld umgeleitet wird. Funktioniert soweit gut.
Problem: Wie bekomme ich es hin, dass das Programm bei einem Klick auf "Stop" auch stoppt (z.B. ein ProcessClose("ping.exe") o.ä. ausführt)? Denn solange ich in der WhileSchleife bin (und das soll er die ganze Zeit ja über sein), kann ich keine Ereignisse mehr pollen. Daher reagiert das GUI auch in keinster Weise auf einen Klick dieses Buttons oder des Fenster-Schließen-Buttons oben rechts.
Über Eure Hilf würde ich mich freuen!
Gruß
Popopinsel
P.S.: Ach und wie bekomme ich es hin, dass der Text im Edit-Feld automatisch zur letzten Zeile scrollt?