Windowsプログラミングについて質問です。
自分の好きな拡張子のファイルアイコンにドラッグドロップの動作を付けたいと思っています。
レジストリにShellEx\DropHandlerを追加して、CLSIDを書きこめばできるっぽいという所まではわかりました。
ですがどのようなプログラムを組めばよいのか、それ以上わかりません。
MSDNライブラリを眺めてもIPersistFileとかIDropTargetとかを
使えば良さそうな感じなのか?というような程度しかわかりませんでした。

具体的にはドロップされた対象のフルパスとドロップされたファイルのフルパスのリストを得たいのですが、
わかりづらい質問内容かもしれませんが、どなたか教えていただけないでしょうか?

A 回答 (3件)

Microsoft PowerToysのSendTo Extensionsが実行ファイル以外のものに、ファイルを送るとかいう機構を使っているようなので、参考にならないかな(じしんなし)。



参考URL:http://plaza7.mbn.or.jp/~suto/pt.htm
    • good
    • 0

それってごく一般的に、自作アプリケーションにドラッグ&ドロップ


ってことですよね?
ご使用のライブラリはATLってことでよいでしょうか。
アプリケーション一個丸ごとATLで作ってるのでしょうか?
それとも、自作COMコンポーネントでDrag&Drop動作の
サポートのため・・・ということでしょうか。

IPersistFileは多分関係ないと思います。
IDropTargetインターフェイスを継承して、
RegisterDragDropで目的のウインドウをターゲットとして
登録してください。
その後、IDropTargetのDropメソッドを実装してください。
引数にIDataObjectのポインタがありますので、
こいつにアクセスしてGetDataメソッドを起動し、STGMEDIUM構造体へのポインタを得てください。
STGMEDIUM構造体にファイル名を示すメンバがありますよね?

私はやったことないので、ちょっとこれで上手く行くか断言出来ませんが
私がMSDNから読み取れるのはこの程度です。

あとはCOMコンテナにイベントをFireするなり何なりお好きに
いじればいいと思います。

この回答への補足

>自作アプリケーションにドラッグ&ドロップ
とは違うんですけど、同じ処理で問題無いということでしょうか?

>目的のウインドウをターゲットとして登録してください
下記の補足に書いた例でいうと、
「目的のウインドウ」とはa.txtとb.txtが表示されている
エクスプローラのウインドウのことでいいのでしょうか?


それとついでなのですが、
DropメソッドとDoDragDropメソッドの違いが
HELPからあまりよく理解できませんでした・・・
もしよければこの違いも教えていただけないでしょうか?

補足日時:2000/12/16 02:40
    • good
    • 0

ちょっとわかりづらい質問です。

。。
ウィンドウにドロップされたファイルのパスを取得するのであれば、DragAcceptFiles関数、DragQueryFile関数を調べてみてください。
IPersistFileとかIDropTargetについてはパスです。

この回答への補足

ウインドウにドロップするのではなく、
エクスプローラ上にあるアイコンにドロップしたいんです。
それも.exeにじゃなくて、自分が指定した拡張子のファイルに。

例えばa.txtのアイコンの上にb.txtをドロップさせたら
このソフトが起動して二つのファイルの内容を連結したものがa.txtに書きこまれた状態でメモ帳が起動する・・・
とかをやりたいんです。

ATLとかCOMとかの話しだと思うのですが、
どうもよくわからなくて・・・

補足日時:2000/12/15 01:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ