Windowsプログラムでコマンドライン・オプションを使う

Visual C++ 2005 Express Edition で Windowsフォームアプリケーションのプロジェクト(例えば、OpenFileDialog)を新規作成すると、OpenFileDialog.cpp と Form1.h というファイルとが作成されます。通常は、Form1.h にプログラムを書いていきます。そうすると、OpenFileDialog.cpp から、Form1 で定義された OpenFileDialog という namespace の Form1 が呼び出されるというわけです。OpenFileDialog.cpp は、こんな感じです。

// openfiledialog.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "Form1.h" using namespace openfiledialog; [STAThreadAttribute] int main(array<System::String ^> ^args) { // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; }

Windows用プログラムでは、おなじみの WinMain 関数もその複雑な引数も、有りません。C と同様にmain関数が定義されているだけです。しかも、この引数はどう見ても。。。ということで、これを使って、Windowsプログラムにコマンドライン・オプションを付加してみました。

まずは、引数を Form1 に渡します。

Application::Run(gcnew Form1(args)); // 引数にargs追加

と変更するだけです。当然、受け側も変更しなくてはなりません。Form1.h の class Form1 の定義部分です。

public: array<System::String ^> ^StringArgs; // 追加 Form1(array<System::String ^> ^args) // 引数にargs追加 { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // StringArgs = args; // 追加 }

たったこれだけで、Form1 のプログラム領域でコマンドライン・オプションを参照できました。実際の使用例は、こちらからダウンロード(openfiledialog.zip)できます。

サンプルの OpenFIleDialog.exe は、実行すると、おなじみWindows標準のファイル・ダイアログが表示され、選択して閉じると、そのまま終了します。何も結果は残りません。ショート・カットを作って、コマンドライン・オプションを指定するか、DOS窓(DOSプロンプト、コマンド・プロンプト等)を開いて、そこからコマンドライン・オプションを指定して実行すれば、確認できます。

openfiledialog.exe -multi *.txt

-mutli オプションは、マルチ・セレクトを指定します。つけないと、一ファイルしか選択できません。*.txt は、フィルタのオプションです。この例だとテキスト・ファイルとフォルダだけが表示されます。フィルタ・オプションに使えるのは、1アイテムだけです。いくつ指定しても、最後のオプションが有効になるようプログラムされています。オプションは、どちらが先でもかまいません。ダウンロード・ファイルには、ソースも添付してありますので、詳細はそちらで。コメントは、ほとんど有りませんが、短いプログラム(イベントが一つだけ)ですので、簡単に読めると思います。

ところで、このプログラム、DOS窓から実行しても、結果は何も残りません。でも

openfiledialog.exe -multi *.txt > filename.txt

としてやると、filename.txt にファイル・ダイアログで選択したファイルが書き込まれます。ということで、標準入力が使えるコンソール・アプリケーションで、ファイル名を取得したい時、ファイル・ダイアログが使えます。もちろん、Windows用ですが。これが、作った本来の目的でした。

プログラム作製に使ったツールは、Visual C++ 2005 Express Edition 日本語版です。レジストリ等は使用していませんので、適当なフォルダに実行ファイル(openfiledialog.exe)を解凍すれば使えます。なおプログラムの実行に際しては、以下のモジュールが必要です。必要に応じてインストールして下さい。

Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x86)

Microsoft .NET Framework 2.0 Service Pack 1 (x86)

なお、掲載したソースおよび実行ファイルは、ご自由にお使い下さい。ただし、ご使用により、いかなる弊害や不具合が生じたとしても、当方ではいかなる責任も持ちません。予め、ご了承下さい。

注記:

    • "openfiledialog.exe" に、タイムアウト付メッセージ・ボックスやテキスト・ボックスを追加してまとめた、"DialogServices.exe" を作りました。ダウンロードは、こちらから。

    • 詳しい使い方は、ダウンロードしたファイル中の dialogservices.pdf をご参照ください。

Thinking-J

https://sites.google.com/site/thinkingj2007/home

mail : thinkingj.2007@gmail.com