他プログラムへファイルをドロップする方法

解決


sel  2008-08-28 19:17:29  No: 68893

こんにちは。
ファイルのドラッグ&ドロップについて質問させてください。

まずドロップを受け取るのはサンプルも多く、特に問題なかったのですが
逆に他のプログラムのウィンドウにファイルをドロップする方法がわかりません。
(例えばDOS窓にドロップするとパスが入力されるとか)

一応予想としては、
1.SetCapture()でマウスをキャプチャする。
2.離した位置のウィンドウを検索(何かAPIがあるはず?)。
3.WS_DROPFILESメッセージを送る。

という感じかと思うのですが、2と3の具体的な方法がわからず、検索しても出てきません。
探し方が悪いのかもしれませんが、ご指南よろしくお願いします。


sel  2008-08-28 19:28:41  No: 68894

すみません、環境を書くのを忘れていました。
VC++6.0で非MFCです。


熊谷隆史  2008-08-28 23:40:46  No: 68895

> 3.WS_DROPFILESメッセージを送る。
WM_DROPFILES

それで上手く行かないなら
「OleDropTargetInterface」をお調べください。


sel  2008-08-29 00:23:59  No: 68896

レスありがとうございます。
その後の調査で、2については WindowsFromPoint() というAPIがありました。
3は、なんとかHDROPのフォーマットがわかったのでSendMessage()してみましたが
自分に送ると動作するものの、他アプリだと動きませんでした。

というわけでやはりOLEを使うしかなさそうですね・・・
COMはあまり使った事がないのでよく調べてみます。


とおりすg  2008-08-29 06:55:51  No: 68897

DoDragDropとかIDropSourceあたりかな、キーワードは。
↓なんかズバリだと思う。
http://www13.plala.or.jp/kmaeda/winc/dragdrop3.htm


sel  2008-09-04 01:09:14  No: 68898

>>とおりすgさん

レスありがとうございます。
そのページは見つけていたのですが、文法がCなためわかりづらくて苦労してました。
それで、IDropSourceで検索してみると、下のURLを見つけました。
http://hp.vector.co.jp/authors/VA016117/oledragdrop1.html
こっちはクラス化したサンプルなので個人的に見やすいですが、
やはりOLEで四苦八苦しています。

なんとか一通りクラス化し、エディタやVCなどにファイルをドロップできるようになりましたが、
なぜかエクスプローラに対してドロップできない現象が発生してまた頭を悩ませてます。
というわけで引き続き試行錯誤中ですが、表題についてはひとまず解決としておきます。


熊谷隆史  2008-10-04 02:22:34  No: 68899

今更ですが、
私はリンク先の様な事を想定してたので。
http://web.archive.org/web/20050318213350/http://forums.belution.com/ja/vc/000/174/85s.shtml

# こちらの早とちりだったようで失礼。


sel  2008-10-04 04:14:08  No: 68900

改めて最初の投稿を見てみると確かにちょっと紛らわしいですね。(特に後半の適当な予想部分が)
やりたい事は単純にドラッグ&ドロップの実装だったのですが、
そのリンク先も参考になります。ありがとうございます。

ちなみに前投稿のエクスプローラにドロップできない問題に関しては、
クラスでvectorを使っていた部分をポインタのnew&deleteに変更したらうまく動きました。
恐らくvectorの使い方がまずかったのだとは思いますが、
色々あってあまり詳しく検証はしていません。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加