2010-11-22 10 views
2

ドラッグアンドドロップ操作(Windowsエクスプローラから特定のプログラムにファイルをドラッグする)を偽装したいと思っています。このプログラムには4つのドロップターゲットがあるウィンドウがあります。C#:ウィンドウの特定のドロップターゲットにファイルのドラッグアンドドロップアクションを偽装する方法

target-programには独自のグラフィカルサブシステムがあるため、WinFormsもWPFもありません。私はWinSpyを試してみると、ウィンドウ自体は検出されますが、コントロールのどれも検出されません。

ターゲットの1つ上にドラッグすると、別のドライブのフォルダにファイルをドラッグしたときと同じように、Windowsのコピーオプションが表示されます。

+0

あなたがソースコードを持たないプログラムのドラッグ&ドロップを実践することは現実的ではありません。サポートについては、ベンダーにお問い合わせください。 –

+0

彼らからのサポートを受ける方法はありません。 – Hedge

答えて

2

私は文書化された方法はないと思います。

WM_DROPFILESを送信することもできますが、この(1)は、事前にターゲットプロセスメモリにファイル名を記載されていないHDROP構造体に入れる必要があります。(2)ファイルを受け入れる古い方法です。アプリケーションが新しいIDropTarget APIを使用している場合に動作します。 があります。アプリケーションがドラッグソースとして機能し、ユーザーがデータを他のアプリケーションにドロップできるようにするために、Win32 API、DoDragDropがあります。残念ながらDoDragDropはマウスの動きを直接監視するので、マウスの動きやボタンのリリースをシミュレートして、アイテムがどこにドロップされたかを制御する必要があります。 DoDragDropがカーソルの下にあるウィンドウを見つけて、ユーザーが行っているマウスの操作を妨害するため、他のウィンドウがzオーダーの上になければ、これは機能しません。それは最後の手段として使用する必要があります。

+0

Windows-Messageをターゲットウィンドウに直接送信できませんか? – Hedge

+0

私はそれを見て、このプログラムの操作OLEを使用します。それは私がWM_DROPFILESを使用できることを意味しますか? – Hedge

+0

@Hedge:おそらくそうではありません - OLE 'IDropTarget'が 'WM_DROPFILES'を置き換えます。 Dependency Walkerでアプリケーションを開き、 'IDropTarget'で使用される' RegisterDragDrop'または 'WM_DROPFILES'で使用される' DragAcceptFiles'をインポートするかどうかを確認してください。 Spy ++を使用して、 'WM_DROPFILES'メッセージを監視することもできます。 –

関連する問題