Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Вниз

Перехват экранного вывода DOS приложений 


valery_f   (2001-11-27 13:02) [0]

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



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

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



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

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



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

Пример запуска 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;



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

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

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



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

Отправил



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

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



valery_f   (2001-11-28 11:32) [7]

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



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

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



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

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



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

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




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.04 c
4-90417           ogu                   2001-11-25 22:23  2002.01.28  
ProgressBar на API


7-90395           GhostK                2001-10-16 08:15  2002.01.28  
Как это сделать???


4-90429           Yuriy                 2001-11-25 22:13  2002.01.28  
ShellExecute ?


6-90347           Kyd                   2001-11-05 20:16  2002.01.28  
Телнет на ClientSocket


1-90309           Hair_Fly              2002-01-11 11:07  2002.01.28  
Как при компиляции задавать имя exe-файла ?