Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Вниз

редирект вывода на экран   Найти похожие ветки 

 
VirginKiller   (2002-11-10 12:36) [0]

Есть консольное приложение, написанное не мной, которое мне нужно запустить и получить то, что оно вывело на экран. Например, перенаправить вывод в файл. Как это можно сделать?


 
Ученик   (2002-11-10 12:44) [1]

На примере ipconfig

procedure TForm1.Button1Click(Sender: TObject);
var
pi : TProcessInformation;
si : TStartupInfo;
begin
FillChar(si, SizeOf(TStartupInfo), 0);
si.cb := SizeOf(TStartupInfo);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE;
if CreateProcess(NIL, "command.com /c ipconfig.exe >c:\ipconfig.txt",
NIL, NIL, False, 0, NIL, NIL, si, pi) then try
WaitForSingleObject(pi.hProcess, INFINITE)
finally
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess)
end;
ListBox1.Items.LoadFromFile("c:\ipconfig.txt")
end;


 
valnech   (2002-11-10 12:44) [2]

NotYoursProg.exe > c:\temp\1.txt


 
[NEW]Splinter   (2002-11-10 12:45) [3]

В коммандной строке пишешь:
console.exe >> vivod.txt, где console.exe - приложение, "написанное не тобой", а в vivod.txt получишь, то что енто приложение вывело на экран.


 
Alex44   (2002-11-10 19:18) [4]

Ya prisoedinyayus" k voprosu: mozhno li eto sdelat" dinamicheski? Skazhem, programma rabotaet dolgo i ya hochu ee output videt" u sebya. Drugimi slovami, kak perekryt" stdout i stderr?


 
SottNick   (2002-11-11 07:39) [5]

можно, как уже сказали
proga.exe >output.txt
а текстовый файл перечитывать периодически

или писать свой WINOLDAP
:o)


 
Opuhshii   (2002-11-11 08:09) [6]

можно,.. см.ReadConsoleInput/ReadConsole/PeekConsoleInput


 
Song   (2002-11-11 09:00) [7]

CreatePipe()


 
snake1977   (2002-11-11 10:04) [8]

нет такой процедуры в Delphi, во всяком случае я не нашел :((
ReadConsoleInput/ReadConsole/PeekConsoleInput
может кто нибудь поможет куском исходника ??


 
Alex44   (2002-11-11 13:44) [9]

2 Opuhshii, Song

Thanx. Poprobuyu.


 
Song   (2002-11-11 13:48) [10]

2snake1977 (11.11.02 10:04)
Плохо видимо искали.


 
MBo   (2002-11-11 14:06) [11]

master-brain.boom.ru
DosCommand


 
Yegor Derevenets   (2002-11-11 16:30) [12]

_STARTUPINFO.hStdOutput
Где-то уже в форуме был человек, который подобный образом мучал HA, чтобы узнать, что нах-ся в архиве. :-)
По идее выделяется область памяти побольше, пихается поинтер на нее в SI.hStdOutput, потом разбираешься с форматом, что тебе поприходило, выдираешь текст и радуешься жизни!

--
Вполне возможно, полностью навравший,
Я!


 
Alex44   (2002-11-11 19:32) [13]

A hStdOutput---ne dolzhen li eto byt" handle?


 
Lmatveev   (2002-11-12 12:41) [14]

Вот пример. Я думаю разберешься:


procedure Dos2Win(CmdLine:String; OutMemo:TStrings);
const BUFSIZE = 4000;
var SecAttr : TSecurityAttributes;
hReadPipe,
hWritePipe : THandle;
StartupInfo: TStartUpInfo;
ProcessInfo: TProcessInformation;
Buffer : Pchar;
WaitReason,
BytesRead : DWord;
begin

with SecAttr do
begin
nlength := SizeOf(TSecurityAttributes);
binherithandle := true;
lpsecuritydescriptor := nil;
end;
// Creazione della pipe
if Createpipe (hReadPipe, hWritePipe, @SecAttr, 0) then
begin
Buffer := AllocMem(BUFSIZE + 1); // Allochiamo un buffer di dimensioni BUFSIZE+1
FillChar(StartupInfo, Sizeof(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.hStdOutput := hWritePipe;

StartupInfo.hStdError := hWritePipe;

StartupInfo.hStdInput := hReadPipe;
StartupInfo.dwFlags := STARTF_USESTDHANDLES +
STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := SW_SHOW;

if CreateProcess(nil,
PChar(CmdLine),
@SecAttr,
@SecAttr,
true,
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo) then
begin
// Attendiamo la fine dell"esecuzione del processo
repeat
WaitReason := WaitForSingleObject( ProcessInfo.hProcess, 5000);
Application.ProcessMessages;
until (WaitReason <> WAIT_TIMEOUT);
// Leggiamo la pipe
Repeat
BytesRead := 0;
// Leggiamo "BUFSIZE" bytes dalla pipe
ReadFile(hReadPipe, Buffer[0], BUFSIZE, BytesRead, nil);
// Convertiamo in una stringa "\0 terminated"
Buffer[BytesRead]:= #0;
// Convertiamo i caratteri da DOS ad ANSI
OemToAnsi(Buffer,Buffer);
// Scriviamo nell" "OutMemo" l"output ricevuto tramite pipe
OutMemo.Text := OutMemo.text + String(Buffer);
until (BytesRead < BUFSIZE);
end;
FreeMem(Buffer);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
end;
end;


 
Андрей Сенченко   (2002-11-12 16:11) [15]

MBo © (11.11.02 14:06)

Сколько раз уже насталкивался на этот Твой ответ ...
и именно ЭТА ссылка

master-brain.boom.ru
DosCommand

не работает


 
MBo   (2002-11-12 16:19) [16]

>Андрей Сенченко
У меня работает.
Могу выслать, если интересно.


 
Андрей Сенченко   (2002-11-12 16:32) [17]

>MBo © (12.11.02 16:19)

Конечно интересно. Сам второй месяц бьюсь над распаковкой DOS-овских SFX-архивов
ansen@km.ru
Спасибо


 
MBo   (2002-11-12 16:42) [18]

>Андрей Сенченко
Отправил



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
1-69376
Ученик
2002-11-10 12:23
2002.11.21
31 число в какой декаде


4-69634
relict
2002-10-11 14:07
2002.11.21
копирование файла


14-69578
sancho
2002-11-03 19:26
2002.11.21
Install shield express


1-69237
Sergy
2002-11-11 17:29
2002.11.21
Createprocess


1-69243
VJar
2002-11-11 18:57
2002.11.21
Цвет ячейки StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский