<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Запуск консольных приложений и перехват потока ввода/вывода в Delphi XE3</title>
		<description>Обсуждение Запуск консольных приложений и перехват потока ввода/вывода в Delphi XE3</description>
		<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3</link>
		<lastBuildDate>Mon, 20 Apr 2026 17:48:24 +0300</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="http://proghouse.ru/component/jcomments/feed/com_content/13" rel="self" type="application/rss+xml" />
		<item>
			<title>Bellic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1006</link>
			<description><![CDATA[Alex, большое спасибо!!! Пока ждал ответа - практически полностью написал программу... Использовал CreateProcess и выводил сообщения из консоли в Мемо через поток в памяти... За основу взял код от сюда: http://www.sql.ru/forum/830777/vvod-i-vyvod-dannyh-iz-konsolnogo-prilozheniya]]></description>
			<dc:creator>Bellic</dc:creator>
			<pubDate>Sat, 01 Jul 2017 19:26:13 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1006</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1004</link>
			<description><![CDATA[ Компонент TPipeConsole нужен для перехвата потока вывода от консольного приложения. Если вы хотите просто запустить приложение и поток вывода вам не нужен, то и этот компонент вам тоже не нужен. Достаточно просто запустить процесс с помощью функции CreateProcess. Параметры, которые вы перечислили выше, можно использовать в обоих случаях.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Sat, 01 Jul 2017 18:42:02 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1004</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1003</link>
			<description><![CDATA[ Не совсем понял - где ссылка на Компонент с этой правкой? Вот это Он? http://www.proghouse.ru/component/jdownloads/finish/4-razrabotki/35-pipes-pas-win32-i-win64?Itemid=0 Да.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Sat, 01 Jul 2017 18:32:33 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1003</guid>
		</item>
		<item>
			<title>Bellic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1001</link>
			<description><![CDATA[...Или же все команды можно обработать не применяя Компоненту? (пардон - я еще мало опыта имею...)]]></description>
			<dc:creator>Bellic</dc:creator>
			<pubDate>Sat, 01 Jul 2017 14:49:01 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-1001</guid>
		</item>
		<item>
			<title>Bellic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-999</link>
			<description><![CDATA[Вообще хочу прикрутить Окошки к известной lrelease из известного пакета QT. Вот ее параметры командной строки: http://s019.radikal.ru/i603/1707/38/cadec60cb823.jpg Получится ли все это обработать с помощью Вашей компоненты? Спасибо!]]></description>
			<dc:creator>Bellic</dc:creator>
			<pubDate>Sat, 01 Jul 2017 14:22:15 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-999</guid>
		</item>
		<item>
			<title>Bellic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-998</link>
			<description><![CDATA[ Не совсем понял - где ссылка на Компонент с этой правкой? Вот это Он? http://www.proghouse.ru/component/jdownloads/finish/4-razrabotki/35-pipes-pas-win32-i-win64?Itemid=0]]></description>
			<dc:creator>Bellic</dc:creator>
			<pubDate>Sat, 01 Jul 2017 14:08:37 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-998</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-891</link>
			<description><![CDATA[ Я уже поменял код в тот же день на другой. Скачайте ещё раз.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Fri, 28 Apr 2017 16:50:58 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-891</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-889</link>
			<description><![CDATA[Что-то Execute совсем перeстал работать, Код SetLength(CommandLine, MAX_PATH) - портит строку параметров, что логично т.к.: SetLength() - Existing characters in the string or elements in the array are preserved, but the content of newly allocated space is undefined.]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Fri, 28 Apr 2017 11:57:51 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-889</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-884</link>
			<description><![CDATA[ Поправил и для TPipeConsole.Start. Если в параметре CommandLine вы передадите только '--help', то консольная программа так CommandLine и прочитает. А, поскольку вначале CommandLine обычно стоит имя файла программы, то она этот параметр может просто не заметить. Вы можете написать простое консольное приложение и оконное, которое его вызывает, и посмотреть, что вы будете получать в консольном приложении в разных ситуациях. Для остальных версий такая склейка тоже нужна.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Thu, 27 Apr 2017 13:18:20 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-884</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-883</link>
			<description><![CDATA[Соответствие MSDN это может и хорошо, но не являлось ли целью создания этого класса сокрытие сложности WinAPI (кроме того Вы внесли правки только для синхронного запуска)? Можете ли Вы привести пример программы, которая, работает, если ей передавать параметры не вместе с именем, т.е., вроде того: Ведь согласно MSDN склейка имени программы и аргументов в один параметр нужна только для Win16 программ?!]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Thu, 27 Apr 2017 11:33:46 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-883</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-882</link>
			<description><![CDATA[ Пометку сделал. Я поправил код, но так, чтобы можно было использовать и первый и второй параметр. И так, чтобы избежать ошибки access violation. Т.е. в соответствии с описанием функции CreateProcess в MSDN: https://msdn.microsoft.com/ru-ru/ms682425. Теперь если вы ставите пустую строку первым или вторым параметром, то в CreateProcess будет передан nil. Сейчас функцию Execute можно вызвать так: pipeConsole.Execute(     '',     'C:\test\html2xhtml.exe --help',     outputStream, errorStream, processExitCode, processId, nil);]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Wed, 26 Apr 2017 23:01:55 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-882</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-880</link>
			<description><![CDATA[ Пробовал, а также пытался дописывать '\0' в конец строки, чтобы эмитировать стиль Си-строк - не помогло. Полагаю, дело в том, что html2xhtml не поддерживает интерактивный режим (если я правильно выражаюсь), т.е. тот же код нормально работает, например с nslookup.exe, в то же время, если в отдельном окне cmd.exe передать вывод по цепочке, то всё работает: https://www.dropbox.com/s/pjl4s1p1ixwkuox/cmdPipeLine.png?dl=0]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Wed, 26 Apr 2017 11:45:15 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-880</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-879</link>
			<description><![CDATA[Так, во-первых, похоже сначала я скачал старую версию Pipes.pas, который не был помечен как Win64, полагая, что мне нужен он, т.к. у меня x86 и Delphi 2007. Предлагаю добавить пометки в статью о том, что это более старая версия модуля, сейчас это не очевидно. Во-вторых, предлагаю следующую правку, чтобы не передавать имя программы в обоих параметрах метода Execute(), а также защитить путь к программе от пробелов: ]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Wed, 26 Apr 2017 11:34:33 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-879</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-871</link>
			<description><![CDATA[ Если смотреть реализацию, то в функцию CreateProcess нужо передавать 0 в первый или второй параметр если соответствующие параметры-строки пустые, но там это не сделано, поэтому приходится путь к программе писать 2 раза. С помощью функции PipeConsole.Write(); нужно передавать строки завершённые символами перевода каретки #13#10. Программа html2xhtml.exe наверняка ждёт их. Может быть вы забыли передать эти символы?]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Sun, 23 Apr 2017 13:21:16 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-871</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-869</link>
			<description><![CDATA[Подозреваю, что так. В ходе отладки понял, что по всей видимости CreateProcess() внутри Pipes.pas корректно передаёт параметры командной строки только, если имя программы вместе с командной строкой передать во втором параметре (как в вашем примере). Но теперь те же проблемы при асинхронном запуске. html2xhtml.exe никак не реагирует на запись данных в её поток через PipeConsole.Write(); Хотя nslookup.exe работает нормально.]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Sun, 23 Apr 2017 11:44:31 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-869</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-867</link>
			<description><![CDATA[ Что-то я не то ответил в предыдущем комментарии. Функция Execute как раз для работы в синхронном режиме. Вот мой пример, который работает в Берлине: procedure TForm1.FormCreate(Sender: TObject); var   outputStream, errorStream: TMemoryStream;   processExitCode, processId, lastError: DWORD;   criticalSection: TRTLCriticalSection; begin   pipeConsole := TPipeConsole.Create(self);   outputStream := TMemoryStream.Create;   try     errorStream := TMemoryStream.Create;     try       lastError := pipeConsole.Execute(           'C:\test\html2xhtml.exe',           'C:\test\html2xhtml.exe --help',           outputStream, errorStream, processExitCode, processId, nil);       if lastError &lt;&gt; 0 then         RaiseLastOSError;       Memo1.Lines.Add(TEncoding.ASCII.GetString(outputSt ream.Memory));       Memo1.Lines.Add(TEncoding.ASCII.GetString(errorStr eam.Memory));     finally       errorStream.Free;     end;   finally     outputStream.Free;   end; end; Может быть у вас программа зависает, потому, что ждёт ввода?]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Sat, 22 Apr 2017 17:58:31 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-867</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-866</link>
			<description><![CDATA[ В синхронном режиме никак. Чтобы синхронно работать с консольным приложением вам нужно работать без компонента TPipeConsole. Т.е. напрямую использовать функции PeekNamedPipe, WriteFile, ReadFile и т.п. Ясно, ещё такой момент, пытаюсь запустить программу html2xhml.exe (http://www.it.uc3m.es/jaf/html2xhtml/), в настольном приложении Delphi 2007 и почему-то устойчиво получаю Timeout при вызове PipeConsole.Execute(), ну или зависание при timeout = infinite. При этом если просто открываю командную строку и вбиваю в неё те же самые параметры (копирую из отладчика Delphi), то всё работает, как такое может быть?!]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Fri, 21 Apr 2017 11:16:41 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-866</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-855</link>
			<description><![CDATA[ В синхронном режиме никак. Чтобы синхронно работать с консольным приложением вам нужно работать без компонента TPipeConsole. Т.е. напрямую использовать функции PeekNamedPipe, WriteFile, ReadFile и т.п.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Mon, 17 Apr 2017 13:15:34 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-855</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-848</link>
			<description><![CDATA[Не совсем понятно, как пользоваться классом TPipeConsole в синхронном режиме, в частности, как ему передать входной поток?]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Fri, 14 Apr 2017 14:48:23 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-848</guid>
		</item>
		<item>
			<title>iMic написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-847</link>
			<description><![CDATA[Не совсем понятно, как пользоваться классом TPipeConsole в синхронном режиме, т.е. как в этом случае отправить в него строку?]]></description>
			<dc:creator>iMic</dc:creator>
			<pubDate>Fri, 14 Apr 2017 14:30:39 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-847</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-342</link>
			<description><![CDATA[ Добавил в статью ссылку на последнюю версию Pipes.pas с поддержкой Win64. Пробуйте её. Она должна поддерживать все версии Delphi.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Fri, 15 Jan 2016 07:21:04 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-342</guid>
		</item>
		<item>
			<title>Chuxlo написал:</title>
			<link>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-339</link>
			<description><![CDATA[Не возможно скомпилировать в Delphi 7 Undeclared identifier: 'SIZE_T']]></description>
			<dc:creator>Chuxlo</dc:creator>
			<pubDate>Thu, 14 Jan 2016 18:18:34 +0300</pubDate>
			<guid>http://proghouse.ru/programming/13-zapusk-konsolnykh-prilozhenij-i-perekhvat-potoka-vvoda-vyvoda-v-delphi-xe3#comment-339</guid>
		</item>
	</channel>
</rss>
