实现自定义的下载

来源:互联网 发布:python编程用什么软件 编辑:程序博客网 时间:2024/05/01 12:36

       实现自定义的下载

       IE5.5开始,IE允许用户自定义下载。这个功能允许你通过实现一个COM对象来处理文件下载过程和自定义用户界面,以此来扩展IE或浏览器程序的功能。

       要实现自定义的下载,必需创建一个支持IDownloadManager接口的COM对象,IDownloadManager接口仅有一个方法:IDownloadManager::Download该方法在IE或浏览器程序要下载文件时调用。

       有两种方法可以让IE或浏览器程序访问IDownloadManager接口:

1、实现IServiceProvider接口,浏览器程序通过调用IServiceProvider::QueryService方法来得到IDownloadManager指针,可以参考下面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或更高版本,IE或浏览器程序通过检查HKEY_CURRENT_USER或者HKEY_LOCAL_MACHINE/Software/Microsoft/Internet Explorer/Downlo-

adUI键下是否存在包含下载管理对象的CLSID的子键。

 

IDownloadManager::Download

HRESULT Download(IMoniker *pmk,

    IBindCtx *pbc,

    DWORD dwBindVerb,

    LONG grfBINDF,

    BINDINFO *pBindInfo,

    LPCOLESTR pszHeaders,

    LPCOLESTR pszRedir,

    UINT uiCP

)

{

CComBSTR bsUrl ;

pmk->GetDisplayName( pbc , NULL , &bsUrl ) ;

// 下载url

return S_OK ;
}