Funktionreferenz


StdinWrite

Beschreibung anzeigen in

Schreibt eine Anzahl von Zeichen in den STDIN-Stream eines zuvor gestarteten Child-Prozesses.

StdinWrite ( process_id [, data] )

Parameter

process_id Die Prozess-ID eines Child-Prozesses, wie aus einem vorigen Aufruf von Run zurückgegeben.
data [optional] Die auszugebenden Daten. Diese können entweder Text oder binär sein.

Rückgabewert

Erfolg: Die Anzahl der geschriebenen Zeichen.
Fehler: Setzt das @error Flag auf ungleich null, falls STDIN an diesen Prozess nicht weitergeleitet wurde oder falls ein anderer Fehler auftrat.

Bemerkungen

StdinWrite() schreibt in den Konsolen-Standard-Eingabe-Stream eines Child-Prozesses, der normalerweise von Konsolen-Applikationen genutzt wird, um Benutzereingaben zu lesen, z.B. von der Tastatur. Beim Aufrufs von Run für den Child-Prozess, in den man schreiben möchte, muss der STD I/O Parameter den Wert von $Stdin_Child (1) enthalten, damit diese Funktion richtig arbeitet (siehe die Funktion Run).

Der zweite, optionale, Parameter enthält den String, den man mit StdinWrite() in den Stream schreiben möchte. Wenn die Funktion ohne zweites Argument aufgerufen wird, dann schließt StdinWrite() den Stream und macht weiteres Schreiben in ihn ungültig.

Der Stream ist ein FIFO Puffer willkürlicher Grösse. Sollte, wann immer die Funktion aufgerufen wird (es sei denn, sie wird aufgerufen, um den Stream zu schliessen) nicht genügend Platz sein, um Zeichen in den Stream zu schreiben, blockiert (pausiert) StdinWrite(), bis der Child-Prozess den Stream schließt oder genügend Zeichen aus dem Stream liest, um den Schreibvorgang zu vollenden. Das bedeutet, der AutoIt Prozess wird solange gestoppt -und es findet keine Verarbeitung von Hotkeys, GUI-Nachrichten, etc. statt- bis der Child-Prozess aus dem STDIN-Stream liest.

Zeichen werden in ANSI umgewandelt bevor diese geschrieben werden.

Binärdaten werden so geschrieben wie sie sind. Sie werden nicht in einen String umgewandelt. Um die hex Darstellung von Binärdaten auszugebenen ist die String()-Funktion zu verwenden. Dadurch werden die Daten explizit in einen String umgewandelt.

Verwandte Funktionen

Run, RunAs, StderrRead, StdioClose, StdoutRead

Beispiel

#include <AutoItConstants.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $iPID = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

    ; Schreibt den zu sortierenden String in sort.exe's STDIN
    StdinWrite($iPID, "Banana" & @CRLF & "Elephant" & @CRLF & "Apple" & @CRLF & "Deer" & @CRLF & "Car" & @CRLF)

    ; Der Aufruf von StdinWrite ohne den zweiten Parameter schließt den Stream.
    StdinWrite($iPID)

    Local $sOutput = "" ; Speichert die Ausgbabe von StdoutRead in einer Variablen.

    While 1
        $sOutput &= StdoutRead($iPID) ; Liest den Stdout Stream der von Run zurückgegebenen PID.
        If @error Then ; Beendet die Schleife falls der Prozess beendet wurde oder StdoutRead einen Fehler zurückgibt.
            ExitLoop
        EndIf
    WEnd

    MsgBox($MB_SYSTEMMODAL, "", "Der sortierte String lautet: " & @CRLF & $sOutput)
EndFunc   ;==>Example