AutoIT - Auf Eingabeaufforderung reagieren
Hallo zusammen,
folgendes Problem:
Ich habe eine AutoIT GUI. In einem Input gebe ich einen Befehl ein, z.B.. Anschließend drücke ich auf einen Button und AutoIT sendet den befehl an die cmd und gibt mir anschließend das Ergebnis in einem Edit aus.
Wenn ich nun aber einen Befehl wie benutze, bekomme ich keine Rückgabe, da time eine Eingabe erwartet.
Ist es möglich, diese Eingabe ebenfalls in der AutoIT GUI zu realisieren und sozusagen eine "Antwort" an die versteckte cmd zu schicken?
Hier mal mein kleines Codeschnipsel, ist nichts schönes, dient einfach nur zu Testzwecken:
folgendes Problem:
Ich habe eine AutoIT GUI. In einem Input gebe ich einen Befehl ein, z.B.
ipconfig
Wenn ich nun aber einen Befehl wie
time
Ist es möglich, diese Eingabe ebenfalls in der AutoIT GUI zu realisieren und sozusagen eine "Antwort" an die versteckte cmd zu schicken?
Hier mal mein kleines Codeschnipsel, ist nichts schönes, dient einfach nur zu Testzwecken:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("ipconfig Test", 657, 428, 267, 242)
$Button1 = GUICtrlCreateButton("Ausführen", 8, 8, 75, 25)
$Input1 = GUICtrlCreateInput("", 90, 8, 200, 25)
$Edit1 = GUICtrlCreateEdit("", 8, 40, 633, 377)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$befehl = GUICtrlRead($Input1)
$rueckgabe = ""
$pid = Run($befehl,"",@SW_HIDE,6)
While 1
; Rückgabe auslesen
If StdOutRead($pid,True) Then $rueckgabe &= StdOutRead($pid)
If StdErrRead($pid,True) Then $rueckgabe &= StdErrRead($pid)
; bei Fehler ist der Process beendet
If @error Then ExitLoop
; und warten, oder wollen wir den Rechner 100% auslasten
Sleep(100)
Wend
$wert = GUICtrlRead($Edit1)
GUICtrlSetData($Edit1, $wert&@CRLF&$rueckgabe)
EndSwitch
WEnd
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313524
Url: https://administrator.de/contentid/313524
Ausgedruckt am: 13.11.2024 um 11:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo,
Ein "time /?" hätte es dir auch gesagt.
Gruß,
Peter
Zitat von @veniplex:
Wenn ich nun aber einen Befehl wie benutze, bekomme ich keine Rückgabe, da time eine Eingabe erwartet.
Wenn du nur die Zeit oder das Datum lesen willst tut es einWenn ich nun aber einen Befehl wie
time
time /t
date /t
Gruß,
Peter
Hi,
wait a max. defined time for the process to return. If this time is elapsed, make the console visible and bring it to the front. AutoIt has enough Win32 functions to do this.
Regards
wait a max. defined time for the process to return. If this time is elapsed, make the console visible and bring it to the front. AutoIt has enough Win32 functions to do this.
Regards
Das musst du dann spezifisch je nach Befehl hinterlegen und per StdInWrite() an den Prozess senden. Hier das Beispiel für time
#NoTrayIcon
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("ipconfig Test", 657, 428, 267, 242)
$Button1 = GUICtrlCreateButton("Ausführen", 8, 8, 75, 25)
$Input1 = GUICtrlCreateInput("", 90, 8, 200, 25)
$Edit1 = GUICtrlCreateEdit("", 8, 40, 633, 377)
GUICtrlSetData(-1, "")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$befehl = GUICtrlRead($Input1)
$rueckgabe = ""
$pid = Run("cmd /c """ & $befehl & """","",@SW_HIDE,$STDIN_CHILD + $STDOUT_CHILD + $STDERR_CHILD)
while ProcessExists($pid)
Do
Sleep(10)
$rueckgabe &= StderrRead($pid)
$rueckgabe &= StdoutRead($pid)
Until Not @extended Or @error
; Prozess is noch nicht fertig ? dann schick ihm Daten per Stdin
if ProcessExists($pid) then
StdinWrite($pid,"10:00:00" & @CRLF)
StdinWrite($pid)
EndIf
Do
Sleep(10)
$rueckgabe &= StderrRead($pid)
$rueckgabe &= StdoutRead($pid)
Until @error
ExitLoop
Wend
$wert = GUICtrlRead($Edit1)
GUICtrlSetData($Edit1, $wert&@CRLF&$rueckgabe)
EndSwitch
WEnd