Cách tiếp cận tôi trình bày ở đây cảm thấy bị hack nhưng tôi không thể tìm thấy cách tốt hơn để phát hiện xem đầu ra tiêu chuẩn đã được chuyển hướng khỏi bảng điều khiển màn hình hay chưa. Cách tiếp cận sử dụng GetFileType
không thể phát hiện tất cả các dạng chuyển hướng vì một số chuyển hướng đến các thiết bị kiểu FILE_TYPE_CHAR
.
Gọi GetConsoleMode()
chuyển bộ xử lý đầu ra tiêu chuẩn. Nếu GetConsoleMode()
không thành công thì bảng điều khiển của bạn đã được chuyển hướng.
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.
Nguồn
2012-01-26 16:59:31
bản sao có thể có của [Cách phát hiện nếu Console.In (stdin) đã được chuyển hướng?] (Http://stackoverflow.com/questions/3453220/how-to-detect-if-console-in- stdin-has-been-redirect) –