プロが教える店舗&オフィスのセキュリティ対策術

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

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

A 回答 (3件)

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

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

この回答への補足

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

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

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

補足日時:2000/12/15 01:25
    • 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

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



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

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