Einzelnen Beitrag anzeigen

scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#5

Re: Commandline-Tool in Delphi-Prog umleiten

  Alt 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;
  Mit Zitat antworten Zitat