Podejście, które tu prezentuję, wydaje się być hacky, ale nie mogę znaleźć lepszego sposobu na wykrycie, czy standardowe wyjście zostało przekierowane z konsoli ekranowej. Podejście z użyciem GetFileType
nie może wykryć wszystkich form przekierowania, ponieważ niektóre przekierowania dotyczą urządzeń typu FILE_TYPE_CHAR
.
połączeń GetConsoleMode()
przechodząc standardowego uchwytu wyjściowego. Jeśli zawiedzie GetConsoleMode()
, Twoja konsola została przekierowana.
program RedirectionDetection;
{$APPTYPE CONSOLE}
uses
Windows;
function ConsoleRedirected: Boolean;
var
Mode: DWORD;
begin
Result := not GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), Mode);
end;
begin
if ConsoleRedirected then begin
Writeln('I have been redirected');
end else begin
Writeln('I am a console');
Readln;
end;
end.
możliwe duplikat [Jak wykryć, czy Console.In (stdin) został przekierowany?] (Http://stackoverflow.com/questions/3453220/how-to-detect-if-console-in- stdin-has-been-diirected) –