(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
Re: Programmfortschritt zwischendurch zeigen?
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
|
|
Zitat
|