实现自定义的下载
从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 ;
}