Registriert seit: 31. Okt 2003
1.120 Beiträge
Delphi 7 Personal
|
Re: Commandline-Tool in Delphi-Prog umleiten
21. Jan 2004, 01:07
Das liegt wie oben gesagt, an den 4KB max. Puffer. Um die längere Verarbeitung zu ermöglichen und den Buffer zu leeren, würde ich es so machen:
Delphi-Quellcode:
procedure CaptureDosCmd(command:String;OutputMemo:TMemo);
//...
CurSize : Cardinal;
procedure GetBuffer;
begin
Repeat
BytesRead := 0;
ReadFile(ReadPipe,CaptureBuffer[0],CaptureBufferSize,BytesRead,nil);
CaptureBuffer[BytesRead]:= #0;
OemToAnsi(CaptureBuffer,CaptureBuffer);
OutputMemo.Text := OutputMemo.Text+String(CaptureBuffer);
until (BytesRead < CaptureBufferSize);
end;
begin
//...
repeat
WaitHandle := WaitForSingleObject( ProcessInfo.hProcess,0);
CurSize := FileSeek(ReadPipe,0,2);
If (CurSize >= 4096) then // Puffer in Memo ausgeben und damit leeren
GetBuffer;
Application.ProcessMessages;
until (WaitHandle = WAIT_OBJECT_0) or (WaitHandle = WAIT_FAILED) or application.terminated;
if not application.terminated then
begin
CurSize := FileSeek(ReadPipe,0,2);
If (CurSize > 0 ) then // Falls Rest im Puffer, in Memo ausgeben
GetBuffer;
end;
|
|
Zitat
|