Bra*_*rad 17 .net vb.net drag-and-drop ole google-chrome
谷歌浏览器有一个方便的功能,我可以点击下载链接并将其拖到Windows资源管理器窗口,然后删除.删除后,Chrome会下载该文件,然后它会显示在我删除的位置.
我希望能够从谷歌浏览器中删除我的应用程序,但似乎并非如此简单.我有一个名为gridFiles的DataGridView,以及以下代码:
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
Run Code Online (Sandbox Code Playgroud)
当我从Windows资源管理器中将文件拖放到它上面时,一切正常,我为每个被删除的文件都有一个消息框.但是,当我从Chrome中删除时,没有任何反应.原因是它DroppedFiles等于Nothing.似乎e.Data.GetData没有返回任何东西.我已经检查与格式e.Data.GetFormats()并将其返回FileDrop,FileName,FileNameW与任何文件下降的预期.
我确信发生的事情是Chrome说它有一些文件以便DragEnter功能,但由于尚未下载文件,DragDrop因此无法完成,因此Chrome不会返回任何文件.我怀疑在Windows资源管理器上下文中,Chrome以某种方式获取该窗口的路径并在稍后将文件复制到那里.
如何欺骗谷歌浏览器进入我的应用程序?我看到这个工作以某种方式给Chrome一个临时文件夹,它认为它已经删除了文件,我的应用程序将监视该文件夹中的新文件并在下载后将其拉入.我只需找到一种方法让Chrome"知道"该文件夹.
或者,如果我可以获得丢弃内容的URL,那也可以.然后我可以用我的程序下载文件.
任何和所有建议都非常感谢.谢谢.
编辑:所以似乎使用常规URL,我得到正确的拖入UniformResourceLocator格式.我看到的行为与Gmail中的下载链接有关.它可能发生在其他地方,但我不确定.将Gmail附件从Gmail拖到我的应用程序中后,我会收到一个FileDrop.
进行更多挖掘,似乎Gmail正在使用download_url锚标记的属性.我以前从未听说过这个.也许这只是他们增加的额外财产?
在任何情况下,由于我的应用程序主要用于电子邮件附件,我需要一种方法让幻像FileDrop工作,如上所述.我无法使用Spy ++.当发生丢弃时,它似乎没有显示任何消息.(我也欢迎任何关于这个问题的建议.)
编辑#2: 以下是有关Gmail如何利用文件拖放功能的更多信息:http: //www.thecssninja.com/javascript/gmail-dragout
您是否考虑过使用Spy++来查看哪些消息从 Chrome 发送到 Windows 资源管理器?Spy++ 具有消息记录功能,这在过去帮助我解决了奇怪的行为。您可以启用 WM_DROPFILES 等的日志记录。