Есть два очевидных пути, по которым вы можете пойти, чтобы попытаться это сделать.
Первое, это подключить функции OLE, участвующие в операциях перетаскивания. Это предполагает, что другое приложение использует реальное перетаскивание , а не какую-то внутреннюю версию. Определить, что это за пределами моих возможностей - без доступа к программе, - но если возможно перетащить из этого внешнего приложения в окно некоторых других приложений (включая рабочий стол), это хороший признак того, что приложение использует реальные вещи.
Функция, которую вам нужно подключить: RegisterDragDrop , хотя DoDragDrop также может представлять интерес. RegisterDragDrop
вызывается для регистрации цели отбрасывания и дает вам возможность обернуть IDropTarget
нужным вам способом (предположительно IPC в ваше реальное приложение), RevokeDragDrop, а затем передать регистрацию, но теперь с вашим объект обертки вместо. IDropTarget :: Drop , вероятно, там, где вы будете выполнять основную часть вашего IPC.
Во-вторых, добавив в приложение хук Windows. Это возможно только в том случае, если вы понимаете действия пользователя, которые вызывают перетаскивание, и можете обнаружить их , поскольку вам нужно будет различать операцию перетаскивания и обычные действия клавиатуры / мыши. Речь идет о WH_CALLWNDPROC
хуке, зарегистрированном в SetWindowsHookEx . По сути, вы определяете WndProc
, который получает все сообщения, которые делает окно приложений (включая движение мыши), и вы сами можете определить, когда начинается операция перетаскивания и когда она останавливается.
В любом случае, много кода может быть написано на C #. С p \ invoke вы можете получить SetWindowsHookEx , и вы можете реализовать COM-объекты (и, соответственно, обертки для этих COM-объектов) в C #. На самом деле, в .NET 2.0 уже есть класс IDropTarget ; который может быть уже видимым COM.
К сожалению, перехват API очень низок, и вам, как правило, придется работать на C или C ++, чтобы что-то сделать. Я слышал хорошие новости о Detours , а также от Microsoft.