Подход, который я здесь представляю, кажется хакерским, но я не могу найти лучшего способа определить, был ли перенаправлен стандартный вывод с экранной консоли. Подход с использованием GetFileType
не может обнаружить все формы перенаправления, поскольку некоторые перенаправления относятся к устройствам типа FILE_TYPE_CHAR
.
Позвоните GetConsoleMode()
, передав стандартную ручку вывода. В случае сбоя GetConsoleMode()
ваша консоль была перенаправлена.
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.