Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Programmfortschritt zwischendurch zeigen?

  Alt 10. Jan 2004, 10:22
guck mal ob du aus der funktion was machen kannst
Delphi-Quellcode:
procedure TForm1.GetPipeOutput(Befehl: String; Parameter: String; Output: TStringlist; Input: TStringlist);
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
  SecurityAttr: TSecurityAttributes;
  PipeOutputRead: THandle;
  PipeInputRead: THandle;
  PipeOutputWrite: THandle;
  Buffer: Array[0..255] of Char;
  count: Integer;
  NumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
 Application.Title := input.Text;
 WriteFile(PipeInputRead, input.Text[1], length(input.Text), NumberOfBytesRead, nil);

 FillChar(SecurityAttr, SizeOf(TSecurityAttributes), 0);
 SecurityAttr.nLength := SizeOf(SecurityAttr);
 SecurityAttr.bInheritHandle := true;
 SecurityAttr.lpSecurityDescriptor := nil;
 CreatePipe(PipeOutputRead, PipeOutputWrite, @SecurityAttr, 0);

 //Initialisierung StartupInfo
 FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
 StartupInfo.cb:=SizeOf(StartupInfo);
 StartupInfo.hStdInput := PipeInputRead;
 StartupInfo.hStdOutput := PipeOutputWrite;
 StartupInfo.wShowWindow := sw_hide;
 StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;

 if CreateProcess(nil, PChar(Befehl + ' ' + Parameter), nil, nil, true,
  CREATE_DEFAULT_ERROR_MODE or CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil,
  StartupInfo, ProcessInfo) then
 begin
  Stream := TMemoryStream.Create; count := 0;
  repeat
   buffer := '';
   ReadFile(PipeOutputRead, Buffer, 255, NumberOfBytesRead, nil);
   Stream.Write(Buffer, NumberOfBytesRead);
   count := count + 1;
  until count * 255 > stream.size;
  Stream.Position := 0;
  output.LoadFromStream(Stream);
  Stream.Free;
  CloseHandle(PipeOutputRead);
 end;
end;
[Edit1]Fehler im Quelltext behoben[/Edit1]
[Edit2]Irgendwie ist hier noch der Wurm drin aber sollte Helfen um das mit den Pipes zu verdeutlichen[/Edit2]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat