|
■No69702 (魔界の仮面弁士 さん) に返信 > 2014/01/22(Wed) 10:11:51 編集(投稿者) > > ■No69699 (azutake さん) に返信 >>特定のプログラムに仮想にてファイルをドラッグ&ドロップする処理を作成しています. > 過去ログ No15616 とか No15727 などのスレッドとか。 > > 直接の C# コード回答では無いですし、可能かどうかは分かりませんが、 > 上記ログによれば、GetProp(hwnd, "OleDropTargetInterface") で IDropTarget を取得し、 > そこから IDropTarget.Drop メソッドを呼び出す手法が書かれていますね。 > > ドロップ先のアプリ実装によっては、その前に DragEnter や DragOver を > 呼び出す事が求められるかも知れませんが、いずれにせよ、ウィンドウ内の > どの場所にドロップするのか、座標情報も渡しておく必要があるでしょう。 > まぁ、座標情報やボタン情報(マウス左右、Shift、Ctrl等)を無視する実装も多いですが。 > > >>この場合どのようなコードを書けば良いのか > > System.Runtime.InteropServices.ComTypes.IDataObject data; > Clipboard.Clear(); > Clipboard.SetFileDropList(ファイルリスト); > OleGetClipboard(out data); > > // IDropTarget IID … {00000122-0000-0000-C000-000000000046} > IDropTarget target = GetProp(hwnd, "OleDropTargetInterface"); > > DragDropEffects dwEffect = DragDropEffects.Copy | DragDropEffects.Link; > target.Drop(data, MK_LBUTTON, pt, ref dwEffect); > > > 後半部、IDropTarget の取得については一切試していませんが、 > イメージコードということで…。 > > > 前半部については、png ファイルを Clipboard.SetFileDropList した結果を > OleGetClipboard で受け取り、それを SHDoDragDrop したところ > ペイントや Visual Studio へのドラッグ&ドロップ処理が行われると > いう点までは確認しました。
ご丁寧にコードの提示,検証等ありがとうございます.
現在外出先のためコードの確認が取れないので,帰宅後コード確認,解決後解決済み化しようと思います. また,Clipboardの使用は必須となりますでしょうか. 何故必要か問うのかと言うと現在作成しているものはあるツールへ文字列を転送しようとしています. また,SendKeysでのキー送信は出来ませんでした. そこでClipBoardにて送信を行い,成功したのですが今度はクリップボードを独占してしまう問題が発生したためドラッグ&ドロップにて出来ないか,と考えに至りました. 後付となり申し訳ありません.
|