C #: Как имитировать действие перетаскивания файла на определенную цель перетаскивания окна - PullRequest
2 голосов
/ 22 ноября 2010

Я хочу подделать действие перетаскивания (перетаскивание файла, скажем, из Windows-Explorer в определенную программу).У этой программы есть окно с четырьмя объектами drop.

. У целевой программы есть своя графическая подсистема, поэтому она не основана ни на WinForms, ни на WPF.Я попробовал WinSpy, и все, что он обнаруживает, - это само окно, но ни один из элементов управления.

Когда я перетаскиваю над одной из целей, она показывает вариант копирования Windows (например, когда вы перетаскиваете файл в папку).на другом диске).

1 Ответ

2 голосов
/ 22 ноября 2010

Я не верю, что есть какой-либо документированный способ.

Вы можете отправить WM_DROPFILES, но для этого (1) необходимо заранее поместить имя файла в недокументированную структуру HDROP в памяти целевого процесса.и (2) является более старым методом приема файлов, он не будет работать, если приложение использует более новые IDropTarget API.

IDropTarget на самом деле имеет более общий характер, чем просто перетаскивание файлов изИсследователь: есть Win32 API, DoDragDrop, который позволяет приложению действовать как источник перетаскивания, чтобы пользователь мог перенести свои данные в другие приложения.К сожалению, DoDragDrop непосредственно наблюдает за движением мыши, поэтому вам нужно смоделировать движение мыши и отпускание кнопки, чтобы контролировать, куда упал элемент.Даже это не будет работать, если другое окно не находится сверху z-порядка, так как DoDragDrop находит окно под курсором и будет мешать любой активности мыши, которую делает пользователь.Так что это следует использовать в качестве крайней меры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...