
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窓が閉じないようにするにはどうすればいいのでしょうか?
No.2ベストアンサー
- 回答日時:
3.の部分について。
VBで似たような事をしたときのことですが。
「COMMAND/C DIR > C:\DIR.TXT」とやら無いと
リダイレクトの結果が残せませんでした。
参考になりましたら。
回答ありがとうございます。
ご指摘の通りdirの前に /Kやら/Cやらオプションを付けると
それだけで1も2も3も全てうまくいくようです(ナゼだ???)
結局良く分からないので、ShellExecute()は止めて、system()関数(VBにもあるのかな?)を使うようにしました。
ありがとうございました。
No.4
- 回答日時:
command.comのオプションをご覧ください。
Windows NT/2000の場合はcmd.exeをお使いになることをお勧めします。command.comで実現されて
いるコマンドを実行させるためには/cスイッチを使います。
ShellExecute(handle, "Open"
, "command.com"
, "/c dir /? > out.txt"
, SW_SHOW);
としてみてください。
No.3
- 回答日時:
「チャイルドプロセス」がキーワードとなるような話を思い出しました。
DIRはDOSの内部コマンドで実行するのはcommand.comです。
リダイレクトで結果保存するのもcommand.comであるため
表示するための領域が必要なのでしょう。
DOSのバッチ処理を作成する際、「複数のバッチ処理を呼ぶバッチ」を実現する
ために必要でした。(今は Callが使えるから)
No.1
- 回答日時:
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.のファイルに出力されない理由はわかりません)
回答ありがとうございます。
/K オプション COMMAND.COMのヘルプにありましたね。回答を頂いて気づきました。(^^;)
そこで色々試してみたのですが、 dirの前に /Kやら/Cやらオプションを付けると
それだけで1も2も3も全てうまくいくようです(ナゼだ???)
結局良く分からないので、ShellExecute()は止めて、system()関数を使うようにしました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) DOSコマンドに詳しい方、お知恵をお貸しください 5 2022/11/04 20:55
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- UNIX・Linux 実行の仕方及び実行結果が分かりません。 2 2022/11/17 19:31
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- UNIX・Linux Linuxについて質問です。 以下のhistoryの出力結果から、sedコマンドのファイル名tmp1 1 2023/02/03 20:11
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBプログラムから「管理者とし...
-
MacOS:ターミナルではNPMのコ...
-
32bitアプリから64bitアプリの...
-
ACCESSでタイトルバーを非表示...
-
batよりjava起動
-
javaアプリケーションからコマ...
-
staticのメモリ共有について
-
windows power shell icacl
-
ACCESS VBA からエクセルを最小化
-
拡張子が.pyのファイルをコマン...
-
バッチファイルの書き方について
-
CloudSticky.jarが起動しない。
-
Eclipseで、プロジェクト名のと...
-
Eclipse(JAVA)のデバッグで他...
-
Eclipse・プロジェクトで、フォ...
-
eclipseのショトカットキー
-
「ワークスペースをビルド中」...
-
正しいURL指定しているにもかか...
-
コミット前の更新データをチェ...
-
「リソース(app.dicon)が見つか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MacOS:ターミナルではNPMのコ...
-
VBプログラムから「管理者とし...
-
batよりjava起動
-
ACCESSでタイトルバーを非表示...
-
ShellExecuteの使い方について
-
windowsのタスクスケジューラを...
-
C# コマンドプロンプト画面で表...
-
32bitアプリから64bitアプリの...
-
SYSTEM関数等を用いて複数のコ...
-
jarファイルをバッチで実行させ...
-
コマンドを実行してコマンドラ...
-
バッチファイルの書き方について
-
Java JDK1.3のインストールとpa...
-
CloudSticky.jarが起動しない。
-
Tomcatのメモリー使用量が知りたい
-
EclipseのJAVADOC生成機能について
-
コマンドプロンプトが使えない
-
実行したらがメモ帳出て来てしまう
-
VB6.0 ラベルが文字化け
-
ShellExecuteでDOSコマンド実行...
おすすめ情報