В Google Chrome есть удобная функция, с помощью которой я могу щелкнуть ссылку для загрузки и перетащить ее в окно проводника Windows, а затем удалить.После удаления Chrome загружает файл и появляется там, где я его уронил.
Я хотел бы иметь возможность добавить Google Chrome в свое приложение, но, похоже, не все так просто.У меня есть DataGridView с именем gridFiles и следующий код:
Private Sub gridFiles_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles gridFiles.DragDrop
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim DroppedFiles() As String = e.Data.GetData(DataFormats.FileDrop)
If Not DroppedFiles Is Nothing Then
For Each file As String In DroppedFiles
MsgBox(file)
Next
End If
End If
End Sub
Private Sub gridFiles_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles gridFiles.DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
e.Effect = DragDropEffects.All
End If
End Sub
Когда я перетаскиваю на него файлы из Windows Explorer, все работает нормально, и я получаю окно сообщения для каждого файла, который был удален.Однако когда я выхожу из Chrome, ничего не происходит.Причина этого в том, что DroppedFiles
равно Nothing
.Кажется, что e.Data.GetData
ничего не возвращает.Я проверил форматы с помощью e.Data.GetFormats()
, и он возвращает FileDrop
, FileName
, FileNameW
, как и ожидалось при любом удалении файла.
Я уверен, что происходит то, что Chrome говорит, что у него есть некоторыефайлов, чтобы DragEnter
функционировал, но, поскольку он еще не загрузил файл, DragDrop
сделать невозможно, поэтому Chrome не возвращает файлов.Я подозреваю, что в контексте проводника Windows Chrome каким-то образом получает путь к этому окну и копирует туда файл позже.
Поэтому мой вопрос ...
Как я могу обмануть Google Chrome, чтобы он уронилв мое приложение?Я вижу, как это работает, как-то давая Chrome временную папку, в которой он думает, что он удалил файл, и мое приложение будет отслеживать эту папку на наличие новых файлов и извлекать их после загрузки.Мне просто нужно найти способ, чтобы Chrome «знал» эту папку.
В качестве альтернативы, если бы я мог получить URL-адрес того, что было удалено, это тоже было бы хорошо.Затем я мог бы загрузить файл с моей программой.
Любой и все советы очень ценятся.Спасибо.
РЕДАКТИРОВАТЬ: Таким образом, кажется, что с обычными URL, я получаю правильный перетаскиваемый формат UniformResourceLocator.Поведение, которое я наблюдаю, происходит со ссылками на скачивание в Gmail.Вероятно, это происходит в другом месте, но я не уверен.Когда вложение Gmail перетаскивается из Gmail в мое приложение, я получаю FileDrop.
При еще одном копании кажется, что Gmail использует атрибут download_url
тега привязки.Я никогда не слышал об этом раньше.Возможно, это просто дополнительное свойство, которое они добавили?
В любом случае, поскольку мое приложение будет в основном использоваться с вложениями электронной почты, мне нужен способ для работы фантомного FileDrop, как указано выше.Я не могу использовать Spy ++.Кажется, он не показывает никаких сообщений, когда происходят падения.(Я также приветствую любые советы по этой проблеме.)
Edit # 2: Вот дополнительная информация о том, как Gmail использует перетаскивание для файлов: http://www.thecssninja.com/javascript/gmail-dragout