• ベストアンサー

DOS窓の非表示

環境:Windows2000,BorlandC++Builder6 system()関数によりDOS上で動く実行ファイルの呼び出し をしています。その際,DOS窓が一瞬出ます。 どうにかDOS窓が出ないようにしたいのですが, 何か方法はないでしょうか? どなたか分かりましたら教えて下さいm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

なるほど、そっちでしたか。(もしかしたら、リダイレクトのことかも、という気はしてたのですが。) リダイレクトはコマンドプロセッサ( WindowsNT/2000/XP では CMD.EXE、Windows95/98/ME では COMMAND.COM )がやっている仕事なので、ShellExecute などで実行させるなら、 "CMD.EXE /C TEST1.EXE <test.txt >r.txt" のようにしないといけないですね。 ( /C については、コマンドプロンプトで CMD /? で見てください。) CMD.EXE or COMMAND.COM のパスは環境変数 COMSPEC で取得できます。

yukky9797
質問者

お礼

>"CMD.EXE /C TEST1.EXE <test.txt >r.txt" 前何度もやってダメだと思っていたのですが,試しにもう一回試してみました。 できました^^;ShellExecuteExを使ってもう一度プログラムを組んでみようと思います。 どうもありがとうございましたm(__)m

その他の回答 (2)

回答No.2

>しかし,DOSで動作する実行ファイルを呼び出した後の処理ができなくなってしまうので というのは、呼び出した実行ファイルの終了コードを取得したいということでしょうか?もしそうでしたら、ShellExecuteEx() でも終了コードを取得できると思いますよ。SHELLEXECUTEINFO のメンバ hProcess にプロセスハンドルが返ってくると思うので、 SHELLEXECUTEINFO sei; sei.cbSize = sizeof( SHELLEXECUTEINFO ); sei.nShow = SW_HIDE; ... ShellExecuteEx( &sei ); WaitForSingleObject( sei.hProcess, INFINITE ); GetExitCodeProcess( sei.hProcess, &dwExitCode ); としてやれば終了コードが取得できると思います。

yukky9797
質問者

補足

こんにちわ。 回答頂きありがとうございます。説明不足で申し訳ありませんm(__)m DOSで動作する実行ファイルを呼び出した後の処理というのは, 呼び出した実行ファイルの終了コードを取得したいということではなく, 標準入出力のリダイレクトです。 例えば,ShellExecuteEx() 等でDOSを呼び出した場合, ”<test.txt >r.txt”このような引数を入れると, 思った通りのことができないのです。 何度も答えて頂きありがとうございます。

回答No.1

System() じゃなくて、ShellExecute()、あるいは ShellExecuteEx() を使用すればできるんじゃないでしょうか。

yukky9797
質問者

補足

回答して頂きありがとうございます。 初め,ShellExecute()やShellExecuteEx()で プログラムを組んでいて,確かにDOS窓は非表示に なります。しかし,DOSで動作する実行ファイルを 呼び出した後の処理ができなくなってしまうので, 最終的にSystem()を使うことにしたのです。 System()を使う限り,DOS窓が表示されるのは 仕方ないことなのでしょうか…?

関連するQ&A