早速質問です。
WindowsでMFCを利用してアプリケーション開発をしています。
console版のアプリケーションの場合、_popen関数を使って、
メインとは、別のプロセスを実行し、その出力を取り出すことが出来ますが、
Windows版のアプリケーションを使った場合、
実行すると、コンソールが一時的に表示されてしまいます。
(注)Windows版の場合、_popen関数が使えないので、
CreatePipe, CreateProcessでMSDNを参考に代用関数を作成しました。
コンソールを表示せずに、出力結果だけをWindowsアプリケーション内の
テキストボックスに取得する方法はないでしょうか?
情報提供お願いします。
--
Post2004 <new...@hotmail.com>
> console版のアプリケーションの場合、_popen関数を使って、
> メインとは、別のプロセスを実行し、その出力を取り出すことが出来ますが、
> Windows版のアプリケーションを使った場合、
> 実行すると、コンソールが一時的に表示されてしまいます。
> (注)Windows版の場合、_popen関数が使えないので、
> CreatePipe, CreateProcessでMSDNを参考に代用関数を作成しました。
_popen を使わず、 CreatePipeとCreateProcessでやっていくしかないでしょう。
VCに付属のC Runtimeソースコードからpopenを調べてみましたが、これは結局
内部的に作ったパイプを与えた上でCreateProcessを CMD.EXE /c コマンド名引数
として呼び出しているのと同じなのですが、その際、STARTUPINFO.wShowWindow
にはなんの設定もしていないので、コンソールを持っていないプロセスから呼び
出すと、新しいコンソールをOSが自動的に開いてしまうわけです。
STARTUPINFO si; とするとき
si.dwFlags |= STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
を与えてコンソールプロセスを起動すれば、新しいコンソールを表示されることは
ありません。
または CreateProcessのdwCreationFlags引数にDETACHED_PROCESSを指定しても
新しいコンソールが開かれることは無いはず(こちらは曖昧な記憶です)
*参考になるページ*
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q190/3/51.asp&NoWebContent=1
190351 - HOWTO: Spawn Console Processes with Redirected Standard Handles
http://www.h4.dion.ne.jp/~fht/wptips/readprc.html
他のプロセスの出力を取得する
----- Takeshi SHIGIHARA
cyg...@tka.att.ne.jp
cyg...@po.jah.ne.jp -----