渋木です。

> のですが、通常のメッセージは取得出来るのですが、エラーメッセージが取得
> 出来ません。どうすればよいのでしょうか?

 ここで言う「エラーメッセージ」は、おそらく標準エラー出力に対して出力さ
れているのでしょう。

 popen() は標準エラー出力を捕捉しないので、popen() を使って目的を達成す
ることは出来ません。

 CreateProcess() など、プロセス起動時に標準エラー出力を指定することがで
きる API も存在するので、コードで挙動を制御したければそれらを使うことに
なると思います。

 あるいは、コマンドシェルが NT 系の cmd.exe であると仮定してよければ、起
動コマンドを

dir b: 2>&1

 のようにすれば、標準エラー出力先を標準出力に切り替えることが出来ます。

 この場合はおそらく、popen() で目的が達成できるでしょう。

--
// 渋木宏明 (Hiroaki SHIBUKI)
// mailto:h...@mbi.nifty.com
// http://www.hidori.jp/
// Microsoft MVP 2002-2003 of Windows