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.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()関数を使うようにしました。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
3.の部分について。
VBで似たような事をしたときのことですが。
「COMMAND/C DIR > C:\DIR.TXT」とやら無いと
リダイレクトの結果が残せませんでした。
参考になりましたら。
回答ありがとうございます。
ご指摘の通りdirの前に /Kやら/Cやらオプションを付けると
それだけで1も2も3も全てうまくいくようです(ナゼだ???)
結局良く分からないので、ShellExecute()は止めて、system()関数(VBにもあるのかな?)を使うようにしました。
ありがとうございました。
No.3
- 回答日時:
「チャイルドプロセス」がキーワードとなるような話を思い出しました。
DIRはDOSの内部コマンドで実行するのはcommand.comです。
リダイレクトで結果保存するのもcommand.comであるため
表示するための領域が必要なのでしょう。
DOSのバッチ処理を作成する際、「複数のバッチ処理を呼ぶバッチ」を実現する
ために必要でした。(今は Callが使えるから)
No.4
- 回答日時:
command.comのオプションをご覧ください。
Windows NT/2000の場合はcmd.exeをお使いになることをお勧めします。command.comで実現されて
いるコマンドを実行させるためには/cスイッチを使います。
ShellExecute(handle, "Open"
, "command.com"
, "/c dir /? > out.txt"
, SW_SHOW);
としてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
外部exe呼び出しの方法 ShellExecuteEx, System...
C言語・C++・C#
-
ShellExecuteの使い方について
JavaScript
-
VC++ で.bat起動
C言語・C++・C#
-
-
4
system関数がうまくいかない
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
cmd /c を使ったときと使わなか...
-
ブレークポイントを設置してな...
-
ACCESSでタイトルバーを非表示...
-
翔泳社のC言語の環境について
-
Tomcatのメモリー使用量が知りたい
-
JAVA バッチファイルの作成・...
-
popen() について。
-
マイクラjavaでForgeを入れたい...
-
OptiFineをJAVAで開こうとする...
-
Eclipseで、プロジェクト名のと...
-
.jarファイルの中身って書き換...
-
html上で、バッチやexeファイル...
-
VisualStudioでC++クラスを追加...
-
Eclipse(JAVA)のデバッグで他...
-
サーブレットでhtml,cssや画像...
-
コンパイル時にエラーが出てし...
-
vs codeはオフラインでも使用で...
-
セットアップファイル(MSIとEX...
-
JSPファイルがコンパイルできな...
-
iアプリ アプリからブラウザを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSでタイトルバーを非表示...
-
jarファイルをバッチで実行させ...
-
VBプログラムから「管理者とし...
-
Java VM のヒープサイズについて
-
MacOS:ターミナルではNPMのコ...
-
ShellExecuteの使い方について
-
batよりjava起動
-
32bitアプリから64bitアプリの...
-
staticのメモリ共有について
-
SYSTEM関数等を用いて複数のコ...
-
windowsのタスクスケジューラを...
-
Javaプログラムでコマンド実行...
-
ACCESS VBA からエクセルを最小化
-
windows power shell icacl
-
CloudSticky.jarが起動しない。
-
JAVA実行ができなくなった・・
-
Tomcatのメモリー使用量が知りたい
-
javaからバッチファイル実行
-
C++ で DIR コマンド
-
popen() について。
おすすめ情報