• ベストアンサー

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

  • system関数を使用時にDos窓を最小化したい

    VC5.0でsystem関数を使用して処理を実行しています。 system関数を使用するとDos窓が表示されますが、 そのDos窓を最小化するにはどうしたら良いですか?

  • DOS窓の非表示について

    常駐で動くC++のプログラムがいくつかあり、 それらの初回起動はBATファイルで『start aaaa.exe』のように 起動をかけています。 C++のプログラムはDOS窓が表示されるようになっていて プログラムが動くたびにパソコンの画面上で複数のDOS窓が チカチカッとなってしまい、とてもわずらわしく、 出来ればDOS窓を非表示にしたいのですが、何か方法はありませんでしょうか?

  • CreatePipeについて

    現在,DOSで動くEXEファイルの実行結果(出力結果)を 取得しようとしています。 (環境:BorlandC++Builder6,Windows2000) CreatePipeを使ったらいいのではという検討をしています が,調べてもCreatePipeがいまいちよくわかりません。 もし,初心者にも分かりやすいCreatePipeについての サイトなど知っている方がいらしゃいましたら 教えていただけないでしょうか? よろしくお願いします。

  • Borland C++5.5の実行でDOS窓が一瞬で消える

    フリーのBorland C++5.5でソースをbcc32でコンパイルして実行ファイルを作成し、実行ファイルをダブルクリックすると一瞬だけDOS窓が見えて消えてしまいます。 従って実行結果を確認することができません。 継続して実行結果を表示させる方法はないでしょうか?

  • DOS窓を閉じないようにするには

    batファイルで ipconfig/all と ping3箇所を一度にできるものを 作成しようとしてるのですが、 バッチファイルですとアイコンをクリックして一瞬で閉じてしまいます。 (チラリと見えはしますが) 閉じずに開いたままにするにはどうすればいいでしょうか? dos窓開いて、手入力でもいいのですが毎回同じ作業を繰り返すものですから できれば簡単にしたいと考えてます。

  • DOS窓の件

    久しぶりにバッチファイルを作ることになった者です。 早速ですが、XPのDOS窓ではエスケープコードの実行が上手くいかないのですが、プロパティーの変更でDOS窓中のバックの色や文字色等が変えられるようです。 その設定を「機動に使ったショートカット」に記録すれば、起動時にバックが黒以外のDOS窓が表示することが出来ました。 この機能を使い、例えば、バックが赤と青のDOS窓を起動する2種類のショートカットを作り、バッチファイルの種類ごとに使い分けられればよいと思うのですが、どのようにすれば良いか分かりません。 ご存知の方がいらしたら教えてください。

  • Win98DOS窓でのファイルネームについて

    Windows98のDOS窓を使用する際での疑問なんですが、 ファイルネームは (1)Windowsの長い形式 (2)DOS用の短い形式 があると思いますが、DOS窓において(1)から(2)を知るには どういった方法があるのでしょうか?

  • 標準出力をDOS窓を開かずにファイルに書き込む方法

    VC++(Console Appli)です。 あるコマンドの標準出力結果をファイルに吐き出す方法として、 単純には、 system("cmnd > C:\\temp.txt"); とやれば実現できますが、このとき、一瞬ですが、DOS窓の黒枠が表示されます。 このDOS窓を出さないで済む方法があれば教えてください。 標準出力を何らかの方法で受け取って、 ------------------------------------------------- CString str; CStdioFile file;   :  cmndの標準出力結果をstrへ内部的に受け取らせる。   : file.Open(_T("c:\\temp.txt"), CFile::modeWrite); file.WriteString(str); file.Close(); ------------------------------------------------- などで簡単に出来れば良いのですが・・よろしくお願いします。

  • MS-VisualC++:コンパイル後実行をするとDOS窓が一瞬だけ現れて消えるのをずっと表示させたいのですが。

    cout << t << endl; return 0; } 単に変数を画面に表示させるだけのプログラムなのですが、Build後、実行すると一瞬DOS窓が立ち上がり表示された後すぐ消えてしまいます。この表示したDOS窓を持続させたいときはどうすればいいのでしょうか。おそらくものすごく基本的なことなのでしょうが、Linux上でしかC++をしてないのでわかりません。

  • バッチ実行後DOS窓を閉じるには

    Windows Me 上での操作なんですが、バッチファイルをダブルクリックで実行後、自動的にDOS窓を閉じるようにしたいです。なおバッチファイルのプロパティに「終了時にウィンドウを閉じる」という設定があるのは知っているんですが、バッチファイル実行時に自動生成されるショートカットを消す為、下記の一行をバッチ内に加えたら「終了時にウィンドウを閉じる」の設定が無効になってしまいました。 del test.pif 動作的な希望としては、「バッチ実行後は自動でDOS窓を閉じる」と「ショートカットを生成しない」の2点をクリアしたいのですが。 良い方法がありましたらどうぞ宜しくお願い致します。

専門家に質問してみよう