IE扩展系列(之自定义下载器一)
首先,翻译段msdn中的文章。
(英文出处:http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/ext/overview/downloadmgr.asp)
实现一个自定义下载器
在Microsoft IE 5.5版本引入一个可自定义下载器的功能,通过一个COM组件来处理文件下载进程,以此来扩展IE或其他web浏览器。
通过实现一个自定义下载器,浏览器应用程序的扩展功能展现出一个用户接口,比如:你能创建一个下载器来浏览MPEG文件或启动某个应用程序。
下载器需要由COM来实现,使其暴露IUnkown和IDownloadManager接口,IDownloadManager拥有一个IDownloadManager::Download方法,能被IE等web浏览器调用来下载文件。当浏览器中一个文件被选择下载,这个自定义下载器将以两种方式被访问:
1. 如果IServiceProvider接口中的IServiceProvider::QueryService方法已被实现,web浏览器首先调用IServiceProvider::QueryService来接收IDownloadManager接口指针,下例示范IServiceProvider::QueryService方法的一种可能实现:
REFIID riid,
void **ppv)
{
HRESULT hr = E_NOINTERFACE;
if (guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
{
// Create new CDownloadMgr object using ATL.
CComObject<CDownloadMgr>* pDownloadMgr;
hr = CComObject<CDownloadMgr>::CreateInstance(&pDownloadMgr);
// Query the new CDownloadMgr object for IDownloadManager interface.
hr = pDownloadMgr->QueryInterface(IID_IDownloadManager, ppv);
}
return hr;
}
2. IE6或其后版本,如果web浏览器没实现IServiceProvider::QueryService方法,或者IE自身不能实现IServiceProvider::QueryService方法,应用程序会检查注册表中包含COM下载器的CLSID键。此CLSID可在以下两个位置任意一处提供:
HKEY_LOCAL_MACHINE
Software
Microsoft
Internet Explorer
DownloadUI
HKEY_CURRENT_USER
Software
Microsoft
Internet Explorer
DownloadUI
如果应用程序无法定位到自定义下载器,将使用默认下载接口。