Стартиране конзолно приложение и пресече входния поток

Да предположим, че трябва да пуснете конзола заявление от прозореца на приложението и да гледате на изходен поток. Можете да запишете текста на съобщението в лог файл, или дисплей текст в прозорец в многоредово текстово поле, например, в TRichEdit. В допълнение, можете да изпратите информация на заявлението, ако то е нещо, което поиска. Нека да видим как да го направя?

Launch конзолни приложения или друго приложение в Делфи е много проста, чрез използване на функцията за CreateProcess. Harder е така, ако имате нужда да тече прилагането на конзолата и по този начин да направи прихващане на потока от I / O. За да направите това, вие трябва да създадете три канала, две за прихващане на изходящите потоци (по един за грешки и една за всичко останало), и една за входния сигнал, а след това започнете процеса, минавайки го тези канали. В този случай, можете да прочетете информацията, която дава прилагането на конзолата и да го управлявате.

Как да напишете кода от нулата може да се намери в Интернет (например, в този форум), но тук ще се спра на TPipeConsole компонент. който е точно предназначен да пресече I / O нишки в Delphi. И това ви дава възможност да го направи удобно.

Съставна част на уреда Pipes.pas. за което съм написал в "Съобщението на статия между процеси в Делфи XE3». Там са написани, как най-добре да инсталирате компонентите. можете да изтеглите ми коригирана версия тук:

(Стара версия. По-добре е да се използва версия на Pipes.pas (Win32 и Win64), виж. По-долу). Класовете на изпълнение yunite TPipeServer (Pipe-сървър), TPipeClient (Pipe-клиент) и TPipeConsole (клас, за да стартирате приложения конзола, управление и прихващане на изхода поток). Работи само на Win32. Единица с моите ревизии да се работи с Delphi до версия XE3. TPipeConsole.Execute функция с моите корекции. Източник тук.