標準入出力とリダイレクトWinMainから始まるWindowsアプリケーションを開発する一番の理由は、自作のウインドウを表示できるという点に尽きるでしょう。ユーザーがグラフィカルな操作を行えなくなるという欠点が目立ちます。グラフィカルなWindowsアプリケーションであっても、場合によってはコンソールを表示したいことがあるかもしれません。コンソールを表示するための関数を理解しておく意味はあります。最初からコンソールアプリケーションとして開発を行うべきといえます。今回はコンソールと標準入出力の関係について説明したいと思います。次のコードを見てください。World\n");}このコードを実行することで何が起きるかは、改めて問う必要もないと思われます。Worldという文字列が標準出力に対して出力されることになります。コンソールに対して出力されると答えることもできますが、これも一応間違いではありません。printfがコンソールへの出力として機能することになるのは事実です。標準入力から文字列を読み取るgetsはキーボードからの入力を受け取ることになります。ある1つの面白い案が浮かびます。printfによる出力を外部アプリケーションが検出できるというものです。printfに指定した文字列はファイルに出力されるようになります。別のハンドルに対して出力されるように切り替える方法をリダイレクトと呼びます。コンソールへの出力をリダイレクトするためには、リダイレクト先のハンドルを対象のプロセスに割り当てなければなりません。プロセスを起動するCreateProcessはこのような動作をサポートするため、その使い方を見てみたいと思います。TEXT("終了します。0;}まず、CreateFileでリダイレクト先とするハンドルを取得します。STARTUPINFO構造体のhStdOutputメンバに指定します。このメンバは標準出力のハンドルを指定することができ、初期化する場合はdwFlagsにSTARTF_USESTDHANDLESを指定します。CreateProcessの第5引数にTRUEを指定すれば、ハンドルは作成したプロセスに継承されることになります。第6引数にCREATE_NO_WINDOWを指定しているのは、作成したプロセスでコンソールが表示されることを防ぐためです。最初から表示されないようにしておくわけです。このプロセスが出力する内容がファイルに反映されることになります。言い換えれば、コマンドプロントにipconfigと入力した内容をファイルを通じて確認できるようになります。