Ok, geht doch nicht.
Folgendes:
Delphi-Quellcode:
repeat
SysUtils.Win32Check(GetExitCodeProcess(PI.hProcess, ExitCode));
PeekNamedPipe(ReadStdOut, Buffer, BufferSize, @Bread, @Avail, nil);
if (Bread <> 0) then
begin
if (BufferSize < Avail) then
begin
BufferSize := Avail;
ReallocMem(Buffer, BufferSize);
end; {end if}
FillChar(Buffer^, BufferSize, #0);
ReadFile(ReadStdOut, Buffer^, BufferSize, Bread, nil);
Str := Last;
I := 0;
while (I < Bread) do
begin
case Buffer^[I] of
#0: inc(I);
#10:
begin
inc(I);
AStrings.Add(Str);
Str := '';
end; {end #10}
#13:
begin
inc(I);
if (I < Bread) and (Buffer^[I] = #10) then
inc(I);
AStrings.Add(Str);
Str := '';
end; {end #13}
else
begin
Str := Str + Buffer^[I];
inc(I);
end; {end else}
end; {end case}
end; {end while}
Last := Str;
end; {end if}
Sleep(1);
Application.ProcessMessages;
until (ExitCode <> STILL_ACTIVE);
Hier existiert eine Endlosschleife. Habe es nun in einem anderen Programmstand ausprobiert. Liegt diesmal zwar nicht am Readfile, doch Bread bleibt immer 0. Buffer ist voll mit #0 und ExitCode bleibt ständig auf STILL_ACTIVE bzw. 259. Irgendwelche Vorschläge? :/
Edit: Hinzuzufügen wäre noch, dass sich am Befehl, den ich ausführe, NICHTS verändert hat.
Edit2: bin am verzweifeln ;o Habe mal spaßeshalber jede Pipe kontrolliert... Alle 4 (NewStdIn,NewStdOut,ReadStdOut,WriteStdIn) sind leer. oO