Что нового

[Данные, строки] StdinWrite в дочерний процесс

Dellroc

Осваивающий
Сообщения
151
Репутация
31
Уважаемые форумчане помогите пожалуйста.
Вот пример из справки, но тут не показано как обрабатывает команды этот "sort.exe".
Код:
#include <Constants.au3>

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

; Записывает строку для сортировки в дочерний sort.exe's Stdin.
StdinWrite($iPID, "Банан" & @CRLF & "Слон" & @CRLF & "Яблоко" & @CRLF & "Олень" & @CRLF & "Автомобиль" & @CRLF)

; Вызов StdinWrite без второго параметра закрывает поток.
StdinWrite($iPID)

Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.

; Читает из дочернего Stdout потока и вывод результата
While 1
    $sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
    If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
        ExitLoop
    EndIf
WEnd

MsgBox(4096, "", "Сортированная строка: " & @CRLF & $sOutput)

Нужно мне это для запуска программы из программы и возможностью передачи ей параметров.
Прошу пример по принципу: процесс AutoIt запускает другой процесс AutoIt и передаёт второму процессу информацию по средствам "StdinWrite". От второго процесса требуется прочитать информацию и вывести в "msgbox".
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Отправляем данные:

Код:
#include <Constants.au3>

HotKeySet('{ESC}', '_Exit')

Global $iCount = 0, $iPid = 0

$iPid = Run('sort.exe', @ScriptDir, @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)

While 1
    StdinWrite($iPid, $iCount)
	$iCount += 1
	Sleep(100)
WEnd

Func _Exit()
	Exit
EndFunc

Считываем данные: Sort.exe

Код:
$hForm = GUICreate('', 100, 30)
$iLabel = GUICtrlCreateLabel('Test', 10, 10, 80, 20)
GUISetState()

AdlibRegister('__Read', 100)

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
	EndSwitch
Wend

Func __Read()
	$sRead = ConsoleRead()
	If $sRead Then
		GUICtrlSetData($iLabel, $sRead)
	EndIf
EndFunc
 
Верх