Ну, проблема в том, что операция перетаскивания в Silverlight не имеет простого доступа к чему-либо за пределами браузера (по замыслу). В зависимости от настроек пользователя вам даже нужно получить явное разрешение на операции с буфером обмена и временное хранилище файлов в песочнице. Это действительно похоже на задачу, лучше подходящую для приложения WPF (возможно, с веб-развертыванием ?) Или какой-либо другой технологией настольных приложений.
Однако, сказанное здесь - это то, что вы можете попробовать / рассмотреть:
- Сочетание Silverlight / Javascript / ActiveX, размещенное в Internet Explorer
- Silverlight 5 "Out of Brower" & P / Invoke (я слышал, что P / Invoke будет поддерживаться, когда выйдет Silverlight 5)
- Silverlight, подключающийся к веб-службе, работающей на том же компьютере (сумасшедший, но вы не просили «не сумасшедший», вы спрашивали о возможном)
Я не очень хорошо знаком с перетаскиванием в Win32 API, поэтому потребовалось бы много исследований и экспериментов, прежде чем я смог бы подтвердить, что это вообще возможно (и я уже могу сказать, что это не практично).
Редактировать : На основании предоставленной вами дополнительной информации по вопросу, который я подозреваю, можно сделать то, что вы пытаетесь. Во-первых, вы используете WPF или WinForms? Я предполагаю, WPF, но один из ваших комментариев говорит WinForms. Я не был очень знаком с операциями перетаскивания WPF, но, посмотрев на них, я думаю, ваш код находится на правильном пути. Я создал приложение WPF и инициировал перетаскивание во время события KeyDown
. Это означало, что кнопка мыши не обязательно была нажата. Если я инициировал DragDrop
, когда кнопка была нажата , она работала. Если бы я инициировал, когда кнопка мыши не была внизу, мне пришлось бы нажать кнопку мыши вниз, и операция перетаскивания началась бы (это было неожиданно, так как я предполагал, что мышь уже должна быть нажата). Если я нажал кнопку мыши вне приложения, затем выделил фокус приложения WPF (ALT + Tab), а затем вызвал DragDrop
, пока кнопка мыши была еще нажата, это не сработало. Я получил ссылку на MouseDevice
и проверил свойство LeftButton
, и состояние показывалось как «Выпущено», хотя кнопка все еще удерживалась. Похоже, ключом здесь является то, как перетаскивание взаимодействует с внутренним состоянием мыши. Возможно, вам придется найти способ установить состояние мыши (может быть, с помощью API автоматизации пользовательского интерфейса?). В этот момент должно быть до боли очевидно, что все это взлом (хотя, возможно, можно заставить его работать как-то).