おそらく、あなたはこの試みることができます:標準出力がリダイレクトされていない場合は、GetFileType()の出力は0×0002である必要があり
public enum FileType : uint
{
FILE_TYPE_UNKNOWN = 0x0000,
FILE_TYPE_DISK = 0x0001,
FILE_TYPE_CHAR = 0x0002,
FILE_TYPE_PIPE = 0x0003,
FILE_TYPE_REMOTE = 0x8000,
}
public enum STDHandle : uint
{
STD_INPUT_HANDLE = unchecked((uint)-10),
STD_OUTPUT_HANDLE = unchecked((uint)-11),
STD_ERROR_HANDLE = unchecked((uint)-12),
}
[DllImport("Kernel32.dll")]
static public extern UIntPtr GetStdHandle(STDHandle stdHandle);
[DllImport("Kernel32.dll")]
static public extern FileType GetFileType(UIntPtr hFile);
static public bool IsOutputRedirected()
{
UIntPtr hOutput = GetStdHandle(STDHandle.STD_OUTPUT_HANDLE);
FileType fileType = (FileType)GetFileType(hOutput);
if (fileType == FileType.FILE_TYPE_CHAR)
return false;
return true;
}
を。 これは私のために働く。 :)
あなたの質問を3年後に読んで、それを読んだ人がいればどれほど愚かなのかを理解しています...これにアプローチする正しい方法は、デフォルトで進捗バーを表示しないことです。特定のスイッチが使用されているときに表示します。 – Nippysaurus
[Console.Outがファイルにリダイレクトされているかどうかをどのように判断できますか?](http://stackoverflow.com/questions/743885/how-can-i-determine-whether-console-out-has-ファイルにリダイレクトされました) –