Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уважаемые Мастера, как можно перехватить консольный вывод.


Mitrofan ©   (2002-02-21 12:12:00) 

К примеру, запускаем из своей программы с помощью функции CreateProcess(...) какое-то консольное приложение, которое выводит некую информацию. И как эту информацию заполучить в свою программу, например в Memo ее выводить ???
Заранее спасибо. Андрей.


Miwa   (2002-02-23 01:32:00) [1]

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

your_prog >> resfile.txt
,
а потом просто считать результирующий файл?


Юрий Зотов   (2002-02-22 15:06:00) [2]

Нет, не будет.

Вы должны:

1. Вызвать CreateFile, указав в Security Attributes, что хэндл будет наследуемым.
2. Полученный хэндл прописать в hStdOutput
3. При вызове CreateProcess указать bInheritHandles = True.

После этого вывод пойдет на устройство, созданное CreateFile (конечно, это не обязательно дисковый файл) - вот оттуда Вы и должны перебрасывать его в Memo своим кодом. И в конце работы нужно освободить 3 хэндла.


Mitrofan   (2002-02-22 14:53:00) [3]

Я че то недопонимаю, что этот хэндл означает и для чего он нужен.
Могу ли я написать следующее и будет ли оно правильное

hStdOutput := Memo1.Handle;

Будет ли консольный вывод "валиться" в мое Memo ???


Виктор Щербаков   (2002-02-22 10:15:00) [4]

Это хэндл, возвращаемый функцией CreateFile.


Mitrofan   (2002-02-21 20:08:00) [5]

В Msdn я нашел такую вещь
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
}

И если я правильно думаю, то наверно это hStdOutput, т.е. хэнд окна куда надо выводить. Неужели я прав ? :) Или заблуждаюсь.


Виктор Щербаков   (2002-02-21 12:14:00) [6]

Смотри описание структуры STARTUPINFO.


Наверх

Титульная страница Поиск, карта сайта Написать письмо