Function Reference

StdinWrite

実行した子プロセスのSTDINストリームに指定された文字を書き込みます。

StdinWrite ( process_id[, data] )

 

パラメータ

process_id Run実行時に返される子プロセスのプロセスID。
data [オプション]出力したいデータ。テキストまたはバイナリです。

 

返し値

成功 書き込んだ文字数を返します。
失敗 STDINがプロセス、その他のエラーをリダイレクトしなかった場合、@errorを非ゼロに設定します。

 

注意

StdinWriteは子プロセスのコンソール標準入力ストリームに書き込みをおこないます。コンソール標準入力ストリームは通常はコンソールアプリケーションがキーボード入力などユーザーによる入力を読み取るために使用されます。この関数が正常に動作するためには、書き込みたい子プロセスをRunで実行する際にSTD I/Oパラメータに値 $STDIN_CHILD (1)を設定する必要があります(Run関数を参照)。

2番目のパラメータはStdinWriteでストリームに書き込みたい文字列です。もし2番目のパラメータを省略するとStdinWriteはストリームを閉じ、書き込みを無効にします。

ストリームは任意サイズの先入れ先出し方式バッファです。この関数呼び出し時(ストリームを閉じるための呼び出しを除く)にストリームに文字を書き込むためのスペースが無い場合、StdinWriteはブロック(一時停止)され子プロセスがストリームを閉じるか、書き込み処理完了に必要な文字数分ストリームから読み取るまで処理を返しません。これは子プロセスがSTDINストリームを読み取るまでAutoItプロセスが停止し、キーシミュレーション、GUIメッセージ処理などがおこなわれないことを意味します。

文字は書き込まれる前にANSIに変換されます。

バイナリデータはそのままm書き込まれます。文字列に変換されることはありません。 バイナリデータを16進数表記で表示したい場合はString()関数を使って明示的にデータを文字列にキャストしてください。


 

関連

StdoutRead, StderrRead, StdioClose, Run, RunAs

 


; StdinWrite()使用のデモ
#include <Constants.au3>

Local $foo = Run("sort.exe", @SystemDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
; sort.exeのSTDINにソートしたい文字列を書き込む
StdinWrite($foo, "rat" & @CRLF & "cat" & @CRLF & "bat" & @CRLF)
; 2nd argの省略でストリームを閉じる
StdinWrite($foo)

; 子プロセスのSTDOUTを読み取り、表示
Local $data
While True
    $data &= StdoutRead($foo)
    If @error Then ExitLoop
    Sleep(25)
WEnd
MsgBox(0, "Debug", $data)