该方法的具体实现是参照lingll写的,有兴趣的可以去看看他的博客。
想必使用过IE的人都知道,在下载问些文件的时候,比如论坛附件的时候,会新建一个空白页,紧接着弹出保存文件的对话框,接着关闭这个空白页。当然应该关闭的,这个空白页没有任何用处。
问题在于如何准确的在下载文件的时候获得这样的通知?答案就是实现IDownloadManager接口。实践证明,FileDownload事件在某些时候不准确,不好用。
并且,IDownloadManager接口在得到通知的同时还更详细的信息,描述如下:
Private Sub IDownloadManager_Download(ByVal pmk As olelib.IMoniker, ByVal pbc As olelib.IBindCtx, ByVal dwBindVerb As Long, ByVal grfBINDF As Long, pbindinfo As olelib.BINDINFO, ByVal pszHeaders As Long, ByVal pszRedir As Long, ByVal uiCP As Long)
End Sub
因为此时可以用olelib.SysAllocString(pmk.GetDisplayName(pbc, Nothing))得到目标URL,那么还可做一些判断,比如.html等文件就不要下载了,直接返回S_OK即可。如果你仅仅是为了得到通知,那么返回INET_E_DEFAULT_ACTION即可。既然已经可以得到URL,那么此时可以调用某些下载器来下载。这在某些不允许用下载工具的网站下还有很有作用的。
甚至你可以自己写一个简单点的下载工具直接下载到事先定义好的目录,岂不方便?
在得到下载事件之后就简单多了,检查当前页是不是空白页,是的话,用代码关闭即可。
该接口的作用远不局限于此,具体的可参阅MSDN的描述。
PS:实现这个接口后可能会有点小的弊病,参见我当的提问:
http://topic.youkuaiyun.com/u/20080603/11/48fc10c6-2808-4fe6-8ae5-df9080d2f096.html
当然,这也是可解决的,这是后话了,以后可能会谈到。