How do I check if my Delphi console app is redirected to a file or pipe?

后端 未结 2 575
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-09 11:56

I have a console app that must disable or enable some operations when output is redirected (externally) to a file or pipe (myapp.exe > Foo.bar)

How I can check if my

2条回答
  •  遥遥无期
    2020-12-09 12:51

    you can use the GetStdHandle and GetFileType functions.

    first you retrieve the console output handle using the GetStdHandle function and then you can check the type of the handle with the GetFileType function.

    {$APPTYPE CONSOLE}
    
    {$R *.res}
    
    uses
      Windows,
      SysUtils;
    
    
    function ConsoleRedirected: Boolean;
    var
      FileType : DWORD;
    begin
      FileType:= GetFileType(GetStdHandle(STD_OUTPUT_HANDLE));
      Result  := (FileType=FILE_TYPE_PIPE) or (FileType=FILE_TYPE_DISK);
    end;
    
    
    begin
      try
        if ConsoleRedirected then
          Writeln('Hello From File')
        else
          Writeln('Hello Console');
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
    end.
    

提交回复
热议问题