Главная страница
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.021 c
2-1182829827
Dreamse
2007-06-26 07:50
2007.07.22
Как из массива который содержит список нескольких DataTime


2-1182966867
Ivolg
2007-06-27 21:54
2007.07.22
Проблема с вкладками


2-1182795656
Sonic90
2007-06-25 22:20
2007.07.22
Несколько значений


15-1182220353
Slider007
2007-06-19 06:32
2007.07.22
С днем рождения ! 19 июня 2007 вторник


15-1182431824
koha
2007-06-21 17:17
2007.07.22
В нашу сеть повадильсь кулхацкеры лазить