- ベストアンサー
コンソールアプリ内でDosコマンドを使用したい
kirishima8と申します。 よろしくお願いします。 開発環境 WindowsVista business 32bit Visual Studio 2005 VC++ Win32アプリでコンソールアプリで、Dosのコマンドラインを利用したいのです。 新たにbatファイル等を作成・実行するのではなく、ずっと同一のコンソールウィンドウを利用し、かつ、Dosコマンドをプログラム側から利用できたらと考えています。 コマンドプロンプトのような機能を、自分で作ったアプリに実装させたいというのが最終的な目標となります。 MSDNで調べてみたところ、WriteConsoleInput()や関連APIが見つかりました。 しかしながら、パラメータの説明が何を指すのかという点が、現時点で私には解り辛いです。 何らかの情報をお持ちの方、ご教授ください。 未熟者ですので、上記では内容が伝わらないかもしれません。 何か不明な点がございましたら、お尋ねになってください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
★質問の意図が良くつかめませんでした。 >コマンドプロンプトのような機能を、自分で作ったアプリに実装させたいというのが最終的な目標となります。 ↑ 本当にご自分で『コマンド・プロンプト』のようなシェル機能を実装したいのですか? 単に『コマンド・プロンプト』で動くプログラムを実行したいだけなら回答者No.1さんの アドバイスにあるやり方で実行できます。 ・ShellExecute()以外にもWinExec()、CreateProcess()やC標準関数のsystem()関数も使えます。 Windowsプログラムにおいて一番お手ごろなのはShellExecute()でしょうね。 使い方は ShellExecute( (1), (2), (3), (4) ,(5) ,(6) ); (1)親ウインドウハンドル (2)操作文字列 (3)コマンド名 (4)パラメータ (5)作業ディレクトリ (6)表示状態 こんな感じです。 ・この質問はシェル機能を実装したいのか? DOSコマンドを単に実行したいのか? またはそれ以外なのか? 補足して下さい。 ・でわ。また。
その他の回答 (1)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
お手軽なのは、 #include <stdlib.h> で、 std::system("この中にコマンドラインをそのまま"); かと思います。 ただ、これは、実行時に「窓」が表示されますけど。 以前描いたコードを探してみたら、 ShellExecute(NULL, "open" ,"C:/etc/SHOWJST.EXE", "/O" ,NULL, SW_HIDE); というのがありました。 多分、#include <windows.h> で使えるのではと思います。 上のコードで、 NULL …… 多分、このまま "open" …… おなじく、 "C:/etc/SHOWJST.EXE" …… ここに実行ファイル名 "/O" …… これは、実行ファイルに渡すオプション部分 NULL …… 多分、このまま SW_HIDE …… 窓を開かずに実行 で、実行は可能なはずです。
お礼
早速のご回答、感謝致します。 >ShellExecute() 現時点での私が直面している課題を克服するには十分効果を発揮してくれています。 std::systemは、Dosコマンドをプログラムで実行させたいという本来の希望を叶えてくれるのですが、新たにウィンドウが表示される点だけは容認し難いところがあります。 下手な質問文に対応して頂き、感謝致します。
お礼
>★質問の意図が良くつかめませんでした。 お手間を取らせました。 要領を得ない表現が多々あったと私も反省しております。 >・この質問はシェル機能を実装したいのか? >DOSコマンドを単に実行したいのか? >またはそれ以外なのか? ・実行ファイルでDOSコマンドを叩いて、その出力データを取得したい。 ・WIN32APIを直接利用しなくても、代用可能な処理はDOSコマンドに任せてしまいたい。 ただしいずれの場合も、ウィンドウ表示はさせたくありません。 また、別にbatファイルのような実行ファイルを用意しておいて、それを利用するというやり方はNGということでお願いします。 >・ShellExecute()以外にもWinExec()、CreateProcess()やC標準関数のsystem()関数も使えます。 現在アドバイスに従い、調査・実験中です。 助言感謝致します。