アプリ版:「スタンプのみでお礼する」機能のリリースについて

VC++6.0においてShellExecuteでDOS窓をたち上げてコマンドを
実行したいのですが、うまくいきません。

1.ShellExecute(m_hWnd,"open","command.com","dir",NULL,SW_SHOW);
...とすると”指定された COMMAND 検索ディレクトリが違います.”となり、
なにも実行されません。

2.ShellExecute(m_hWnd,"open","command.com","dir /?",NULL,SW_SHOW);
...とするとちゃんとdirのヘルプが表示されますが、すぐに窓が閉じます。

3.ShellExecute(m_hWnd,"open","command.com","dir /? > out.txt",NULL,SW_SHOW);
...としてもファイルが作られず、2.と全く同じ結果になってしまいます。

これはどうしてこのような現象が起きるのでしょうか?
DOSプロンプトをたち上げて同様なコマンドを実行した場合はちゃんと期待通りの結果が得られます。
あと、DOS窓が閉じないようにするにはどうすればいいのでしょうか?

A 回答 (4件)

3.の部分について。


VBで似たような事をしたときのことですが。

「COMMAND/C DIR > C:\DIR.TXT」とやら無いと
リダイレクトの結果が残せませんでした。

参考になりましたら。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ご指摘の通りdirの前に /Kやら/Cやらオプションを付けると
それだけで1も2も3も全てうまくいくようです(ナゼだ???)

結局良く分からないので、ShellExecute()は止めて、system()関数(VBにもあるのかな?)を使うようにしました。

ありがとうございました。

お礼日時:2001/07/12 09:35

command.comのオプションをご覧ください。

Windows NT/2000の場合は
cmd.exeをお使いになることをお勧めします。command.comで実現されて
いるコマンドを実行させるためには/cスイッチを使います。

ShellExecute(handle, "Open"
         , "command.com"
, "/c dir /? > out.txt"
            , SW_SHOW);


としてみてください。
    • good
    • 0

「チャイルドプロセス」がキーワードとなるような話を思い出しました。



DIRはDOSの内部コマンドで実行するのはcommand.comです。
リダイレクトで結果保存するのもcommand.comであるため
表示するための領域が必要なのでしょう。

DOSのバッチ処理を作成する際、「複数のバッチ処理を呼ぶバッチ」を実現する
ために必要でした。(今は Callが使えるから)
    • good
    • 0

DOS窓を閉じないようにするには、command.comに/kオプションを付けて


起動すればOKです。↓こんな感じです。
 ShellExecute(hWnd, "open", "command.com", "/k dir", NULL, SW_SHOWNORMAL);
(WinNT/2Kはcmd.exeを起動したほうが良いと思います)

1~3の現象について何故そうなるかはよくわかりませんが、おそらく
command.comの起動オプションの書式エラーになっているだけだと思います。
DOS窓で command.com /? としてヘルプを見ると、
 COMMAND [[ドライブ:]パス] [デバイス] ...
のようになっていますが、"dir"文字列がドライブ、パスとして認識されて
いるのかもしれません。
2.についても、dirコマンドのヘルプではなく、command.comのヘルプが
表示されているはずです。
(3.のファイルに出力されない理由はわかりません)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
/K オプション COMMAND.COMのヘルプにありましたね。回答を頂いて気づきました。(^^;)
そこで色々試してみたのですが、 dirの前に /Kやら/Cやらオプションを付けると
それだけで1も2も3も全てうまくいくようです(ナゼだ???)

結局良く分からないので、ShellExecute()は止めて、system()関数を使うようにしました。

ありがとうございました。

お礼日時:2001/07/12 09:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています