Hab zwar noch keine Funktion gefunden, welche prüft, ob umgeleitet wurde, aber FlushConsoleInputBuffer funktioniert bei einer Datei nicht, also würden da auch keine Zeichen verloren gehn,
allerdings funktioniert ReadConsoleInput auch nicht und er ließt keine Zeichen ein = Endlosschleife.
Jedenfalls scheint dieses nun in beiden Fällen zu laufen.
Delphi-Quellcode:
var H: THandle;
CI: TInputRecord;
isRedirected: Boolean;
i: Integer;
C: Char;
begin
// initialisieren
H := GetStdHandle(STD_INPUT_HANDLE);
isRedirected := not FlushConsoleInputBuffer(H);
while true do begin
// abfragen
if isRedirected then begin
if EOF then begin
{dateiende erreicht}
//C := #0;
break;
end else Read(C);
end else begin
CI.EventType := KEY_EVENT;
repeat
until ReadConsoleInput(H, CI, 1, Cardinal(i)) and (i = 1)
and (CI.Event.KeyEvent.bKeyDown) and (CI.Event.KeyEvent.AsciiChar <> #0);
C := CI.Event.KeyEvent.AsciiChar;
FlushConsoleInputBuffer(H);
end;
write(C);
sleep(50);
end;
Hier wird mal mit Break abgebrochen, aber dem BF-Programm übergebe ich eine #0, welche dann das Dateiende signalisiert.
Allerdings dachte ich immer Read ließt nur das ein, welches man verlangt und ohne ein Enter zu fordern, so wie es auch bei einer Dateieingabe geschieht
und nur Read
Ln verlangt das Enter.
Nja, hatte es aber auch noch nie so bei einer Konsoleneingabe verwendet.