微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我的.NET Windows窗体上从Chrome实现拖放

谷歌浏览器有一个方便的功能,我可以点击下载链接并将其拖动到Windows资源管理器窗口中,然后删除.放弃后,Chrome会下载该文件,并将其放在我放下的位置.

我希望能够从Google 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

当我从Windows资源管理器中删除文件时,一切正常,我收到每个被删除文件的消息框.但是,当我从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的工作方法,如上所述.我无法使用间谍.当出现丢失时似乎没有显示任何消息. (我也欢迎就这个问题提出任何建议.)

编辑#2:有关Gmail如何利用拖放文件的更多信息:http://www.thecssninja.com/javascript/gmail-dragout

我已经把我头顶上的公里的头发放在了自己的怪异的拖放行为上.六位变量提到的间谍可能是一个好主意.另一个是从我的Q / As中的一个在SO中看一下讨论:

Drag and Drop between Instances of the same Windows Forms Application

从我自己的经验来看,我似乎记得从浏览器拖放是一个安全问题,因此处理方式不同.希望这可以帮助.

编辑:

也许这回答你的问题:

http://www.vbforums.com/showthread.php?t=529211

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐