次のように、stdout をファイルにリダイレクトするコンソール アプリがあります。
private static void Main()
{
Console.SetOut(new StreamWriter("redirect.txt") {AutoFlush = true});
Console.Title = "MyConsoleApp";
Console.Error.WriteLine("This goes from console app to console");
Console.WriteLine("This goes from console app to file");
Console.ReadLine();
}
期待どおりに動作し、コンソールに 1 行のテキストが表示され、もう 1 行がファイルに表示されます。
コンソールに接続する 2 つ目の Winforms アプリもあります。
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
private static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool AttachConsole(uint dwProcessId);
private void AttachAndWrite()
{
IntPtr h = FindWindowByCaption(IntPtr.Zero, "MyConsoleApp");
uint p;
GetWindowThreadProcessId(h, out p);
if(AttachConsole(p))
Console.WriteLine("I want this go to redirect.txt, but it ends up in the console window.");
}
Console.Writeline の出力は、予想していたファイルではなく、コンソール ウィンドウに表示されるようになりました。
- なんで?
- 修正できますか?