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

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

Перехват экранного вывода DOS приложений [D3, D5, Win95/98, Win2k]


valery_f ©   (2001-11-27 13:02:00) 

А не слышал ли кто нибудь про такую возможность? Интересуют две вещи:
1) не плодить отдельное окно при запуске DOS приложения;
2) поймать вывод на экран на предмет его разбора и, возможно, отображения "в нужном месте и в нужном виде".


Delirium   (2001-11-28 20:22:00) [1]

Так-как из "Кладовки" DOSCommand убрали, выложил его (чуть продправленый) у себя www.master-brain.boom.ru


valery_f   (2001-11-28 13:17:00) [2]

> В свойствах pkzip...
А как это сделать? Я ведь пускаю EXE а не PIF или LNK.


Виктор Щербаков   (2001-11-28 11:51:00) [3]

В свойствах pkzip попробуй поставить галку
"Закрывать окно по завершении сеанса работы".


valery_f   (2001-11-28 11:32:00) [4]

> Попробуй не скрывать окно - SI.wShowWindow := SW_SHOWNORMAL;
Уже пробовал - DOS сессия завершается и пишет в заголовке окна "finished", и пока не закроешь - назад не возвращается. При SW_HIDE, соответственно, даже закрывать-то нечего - только прервать тремя кнопками.


Виктор Щербаков   (2001-11-28 10:15:00) [5]

to valery_f
а pkzip с какой коммандной строкой запускал?
т.е. может он у тебя просто консольного ввода дожидается,
потому и кажется, что виснет.
Попробуй не скрывать окно - SI.wShowWindow := SW_SHOWNORMAL;


Delirium   (2001-11-27 18:32:00) [6]

Отправил


valery_f   (2001-11-27 17:33:00) [7]

> ...дай рабочий адрес...
жду на uspekh@vlink.kharkov.ua

> Пример запуска extract.exe
виснет, зараза, на WaitForSingleObject (пытался запустить pkzip)


Виктор Щербаков   (2001-11-27 16:05:00) [8]

Пример запуска extract.exe - DOS распаковщика CAB файлов с перенаправлением консольного вывода в файл:

procedure TForm1.Button1Click(Sender: TObject);
var
SI: TStartupInfo;
PI: TProcessInformation;
begin
//Заполняем структуру инициализации процесса
ZeroMemory(@SI, SizeOf(SI));
SI.cb := SizeOf(SI);
SI.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
SI.wShowWindow := SW_HIDE;

//Перенаправляем вывод в файл
SI.hStdOutput := CreateFile(PChar(ExtractFilePath(Application.ExeName) + "Output.tmp"), GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ, nil, CREATE_ALWAYS,
FILE_FLAG_OVERLAPPED, 0);

//Запускаем
if CreateProcess(nil, "extract.exe", nil, nil, False, 0, nil, nil, SI, PI) then
begin
CloseHandle(PI.hThread);
WaitForSingleObject(PI.hProcess, INFINITE); //ждем
CloseHandle(PI.hProcess);
end;
// Закрываем файл
CloseHandle(SI.hStdError);
end;


Delirium   (2001-11-27 15:54:00) [9]

Увы, письмо вернулось, дай рабочий адрес, пришлю компонент с "перехватом" и "концом работы"


Delirium   (2001-11-27 15:41:00) [10]

Я тебе на thevalery@yahoo.com отослал


Наверх

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