Содержание материала

Самые умные (то есть те, кто ухитрился дочитать до этого места :-))) спросят:

- Ну, создали мы процесс и что дальше?

 

А дальше - мы можем с ентим процессом общаться! Например вот так:

 

Code:

function TChildProc.WriteToChild(Data: string; Timeout: Integer = 1000): Boolean;

var

dwWritten, BufSize: DWORD;

chBuf: PChar;

begin

//Обратите внимание на Chr($0D)+Chr($0A)!!! Без них - будет работать с ошибками

//На досуге - подумайте почему...

//Для тех, кому думать лень - подскажу - это пара символов конца строки.

//(вообще-то можно обойтись одним, но так надежнее, программы-то бывают разные)

chBuf := PChar(Data + Chr($0D) + Chr($0A));

BufSize := Length(chBuf);

Result := WriteFile(FChildStdinWr, chBuf^, BufSize, dwWritten, nil);

Result := Result and (BufSize = dwWritten);

end;

 

Это мы посылаем данные на StdIn процесса.

 

Читать - несколько сложнее. Нам же не надо вешать всю нашу программу только потому, что процесс не желает нам ничего сообщать??? А ReadFile - функция синхронная и висит - пока не прочитает! Если заранее известно, чего и сколько ДОЛЖЕН выдать процесс, то еще ничего... А если нет?

 

А если нет - делаем хитрый финт ушами :-) Есть у Мелко-Мягких такая ф-ия PeekNamedPipe. Не покупайтесь, на то, что она "Named" - фигня! Она прекрасно работает а анонимными пайпами! (кто не верит - можете почитать хелп)

 

Поэтому делаем так:

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить