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方法的一种可能实现:

STDMETHODIMP CServiceProvider::QueryService(REFGUID guidService,
                                            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
如果应用程序无法定位到自定义下载器,将使用默认下载接口。

posted @ 2007-02-06 16:35  虚幻  阅读(1538)  评论(0编辑  收藏  举报