![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уважаемые Мастера, как можно перехватить консольный вывод.
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.