Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.22;
Скачать: CL | DM;

Вниз

Как вывести результат работы консоли в Memo?   Найти похожие ветки 

 
nord13579 ©   (2007-06-30 21:28) [0]

Нашел в DRKB пример работы с консолью. Пример рабочий если бы не одно но - Программа не выходит из Repeat - Until. Может быть кто-нибудь подскажет где чего нужно подправить?

procedure RunDosInMemo(CmdLine:String;AMemo:TMemo);
const
 ReadBuffer = 2400;
var
 Security            : TSecurityAttributes;
 ReadPipe,WritePipe  : THandle;
 start               : TStartUpInfo;
 ProcessInfo         : TProcessInformation;
 Buffer              : Pchar;
 BytesRead           : DWord;
 Apprunning          : DWord;
begin
Screen.Cursor:=CrHourGlass;
Form1.Button1.Enabled:=False;
With Security do begin
 nlength        := SizeOf(TSecurityAttributes);
 binherithandle    := true;
 lpsecuritydescriptor := nil;
end;
if Createpipe (ReadPipe, WritePipe, @Security, 0) then
begin
 Buffer  := AllocMem(ReadBuffer + 1);
 FillChar(Start,Sizeof(Start),#0);
 start.cb      := SizeOf(start);
 start.hStdOutput  := WritePipe;
 start.hStdInput  := ReadPipe;
 start.dwFlags   := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;
 start.wShowWindow := SW_HIDE;
   if CreateProcess(nil,
     PChar(CmdLine),
     @Security,
     @Security,
     true,
     NORMAL_PRIORITY_CLASS,
     nil,
     nil,
     start,
     ProcessInfo)
 then
   begin
     repeat
       Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);
       ReadFile(ReadPipe,Buffer[0], ReadBuffer,BytesRead,nil);
       Buffer[BytesRead]:= #0;
       OemToAnsi(Buffer,Buffer);
       AMemo.Text := AMemo.text + String(Buffer);
       Application.ProcessMessages;
     until (Apprunning <> WAIT_TIMEOUT);
   end;
     FreeMem(Buffer);
     CloseHandle(ProcessInfo.hProcess);
     CloseHandle(ProcessInfo.hThread);
     CloseHandle(ReadPipe);
     CloseHandle(WritePipe);
end;
Screen.Cursor:=CrDefault;
Form1.Button1.Enabled:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Clear;
 RunDosInMemo("ping ya.ru -r 9 -n 5",Memo1);
end;

end.


 
Lavrenty ©   (2007-06-30 21:37) [1]

Может код нажатия какой-нибудь клавиши попробовать, например

until (Apprunning <> WAIT_TIMEOUT) or (key = #27);


 
nord13579 ©   (2007-06-30 21:44) [2]


> until (Apprunning <> WAIT_TIMEOUT) or (key = #27);

Нужно что-бы выходило само :(


 
nord13579 ©   (2007-06-30 22:00) [3]

Все, разобрался. Нужно:

Apprunning := WaitForSingleObject(ProcessInfo.hProcess,100);

увеличить

Apprunning := WaitForSingleObject(ProcessInfo.hProcess,1000);


 
TUser ©   (2007-06-30 22:53) [4]

> nord13579 ©   (30.06.07 22:00) [3]

Поставь infinate, а то вдруг и тясячи секунд будет мало.



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

Текущий архив: 2007.07.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
15-1182833764
pavel_guzhanov
2007-06-26 08:56
2007.07.22
Есть тут спецы по php и iis?


15-1182120075
midi
2007-06-18 02:41
2007.07.22
Кто знает смысл этой функции?


15-1182329521
Суслик
2007-06-20 12:52
2007.07.22
Коллекции рисунков на tool button ы


15-1182508002
4martina
2007-06-22 14:26
2007.07.22
MACTEPA KAK....


2-1182855821
Vazhik
2007-06-26 15:03
2007.07.22
Консольное приложение