none
ファイルを複数選択した時のアプリケーション引数について RRS feed

  • 質問

  • 現在、.NET を使用し音楽の再生プログラムを作成しています。

     

    そこで、質問なのですが、複数のファイルを選択して、作成したプログラムで開こうとすると、フォームが選択したファイルの数だけ表示されます。この場合、選択したファイルのパス名が1つずつ、それぞれのプログラムのプロセスにあたえられているようです。 

    WindowsMediaPlayerなどはアプリケーションの開始時の引数にすべてのファイル名が送られているように感じられます。(開いたとき、砂時計カーソルが1度しか出ない)

    レジストリなどが関係しているのではないかとおもい、調べた結果、各拡張子の"shell"キー値にアプリケーション開始時の引数設定などが出来るようなのですが、情報が少なすぎて、分かりませんでした。

     ということで、複数のファイルのパスを、1つのプロセスにまとめて引数として送る場合はどうしたら良いのか、知っている方がおられたらご教授お願いします。

     

     

     

     

     

    2007年6月19日 17:07

すべての返信

  •  てんぽらりー さんからの引用

    そこで、質問なのですが、複数のファイルを選択して、作成したプログラムで開こうとすると、フォームが選択したファイルの数だけ表示されます。

     

     

    もっと詳しく、複数ファイル選択後に、何をどのように操作して「作成したプログラムで開く」ていますか?

     

    フォームが複数開く事言うことは、エクスプローラで複数ファイル選択後に、単純にエンター押下などで、ファイル関連付けで起動しているように見えますが、それであっていますか?

     

    であれば、

     

     てんぽらりー さんからの引用

    この場合、選択したファイルのパス名が1つずつ、それぞれのプログラムのプロセスにあたえられているようです。 

     

     

    となるのは Windows の標準的な動作です。

     

     てんぽらりー さんからの引用

    WindowsMediaPlayerなどはアプリケーションの開始時の引数にすべてのファイル名が送られているように感じられます。

     

     

    は、MediaPlayer と .avi ファイルなどの関連付けが少し特殊な設定になっているからと思われます。

     

     レジストリを見てみると分かりますが、.avi の既定の動詞が "play" となっており、かつ動詞 "play" にドロップターゲットが設定されています。

     

     詳しく追跡していませんが、このドロップターゲットが MediaPlayer の起動とファイルリストの引渡しを行っているんでしょう。

     

     てんぽらりー さんからの引用

    レジストリなどが関係しているのではないかとおもい、調べた結果、各拡張子の"shell"キー値にアプリケーション開始時の引数設定などが出来るようなのですが、情報が少なすぎて、分かりませんでした。

     

     

    MSDN Library に解説があります。

     

    Shell Developer's Guide

    http://msdn2.microsoft.com/en-us/library/ms649533.aspx

     

    配下で、ファイル関連付けとシェル拡張に関する全般、ドロップターゲットに関して解説されています。

     

     てんぽらりー さんからの引用

     ということで、複数のファイルのパスを、1つのプロセスにまとめて引数として送る場合はどうしたら良いのか、知っている方がおられたらご教授お願いします。

     

     

    MediaPlayer を模倣するのが順当でしょう。

     

    独自のドロップターゲットを作って、自前アプリを起動して、ファイルリストを渡すようなインフラを整備することになると思います。

     

    # 実際には "play" に関連付けられているドロップターゲットは MediaPlayer 自身で、MediaPlayer がオートメーション起動されているのかもしれません

     

     

     

     

    2007年6月20日 1:22
  •  

    返信ありがとうございます

     

    もっと詳しく、複数ファイル選択後に、何をどのように操作して「作成したプログラムで開く」ていますか?

     

    フォームが複数開く事言うことは、エクスプローラで複数ファイル選択後に、単純にエンター押下などで、ファイル関連付けで起動しているように見えますが、それであっていますか?

     

     

     そのとおりです。エクスプローラで複数ファイルを選択し、エンター押下もしくは開くをクリックによって起動しています。

     

    やはり、MediaPlayerなどは、レジストリのドロップ゚ターゲットを細かく設定しているのですか・・・・。MediaPlayerが対応している拡張子ファイルの、レジストリキー値に"play"という動詞が含まれているので動詞"play"が気になっていましたが、やはりそれが起動時の引数設定などを行っているんですね。

     

    複数ファイルの扱いが可能なプログラムを他にいくつか参照して、レジストリキー値の参照をして見たいとおもいます。

     

    情報の提供ありがとうございます。今まで日本語で調べていたため、海外のページにヒットせず情報が入手不足でした・・・・・

    これからは、英語サイトも情報収集するようにしたいとおもいます。

     

    2007年6月20日 4:03