實現自訂的下載
從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 ;
}