Cómo implementar un administrador de descargas personalizados

Exención de responsabilidades de contenido KB retirado

Este artículo se refiere a productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Resumen

En este artículo paso a paso se describe cómo implementar un administrador de descargas personalizados en Microsoft Internet Explorer 5.5 y Microsoft Internet Explorer 6. Con esta característica, puede ampliar la funcionalidad de Internet Explorer y aplicaciones de WebBrowser mediante la implementación de un objeto de modelo de objetos componentes (COM) para controlar el archivo de proceso de descarga.

Mediante la implementación de un administrador de descargas personalizados, la aplicación de navegador Web o Internet Explorer puede ampliarse para mostrar una interfaz de usuario personalizada. Un administrador de descargas se implementa como un objeto COM que expone la interfaz IUnknown y la interfaz IDownloadManager . IDownloadManager sólo tiene un método, IDownloadManager::Download. Mediante Internet Explorer o una aplicación de navegador Web para descargar un archivo, se llama al método IDownloadManager::Download . Cuando se selecciona un archivo para su descarga en una aplicación de navegador Web, el Administrador de descargas personalizados se accede de dos maneras:
  • En Internet Explorer 5.5 y versiones posteriores, si se implementa el método IServiceProvider:: QueryService de la interfaz IServiceProvider , la aplicación de WebBrowser llama primero a IServiceProvider:: QueryService para recuperar un puntero de interfaz IDownloadManager . Para una posible implementación del método IServiceProvider:: QueryService , consulte la sección "Ejemplo de código" de este artículo.
  • Para Internet Explorer 6 y versiones posteriores, si la aplicación de WebBrowser implementa el método IServiceProvider:: QueryService , o cuando se utiliza Internet Explorer Sí (no se puede implementarIServiceProvider:: QueryService en Internet Explorer), la aplicación comprueba si un valor del registro que contiene el identificador de clase (CLSID) del Administrador de descarga de objeto COM. Se puede proporcionar el CLSID en cualquiera de los siguientes valores del registro:
    \HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\DownloadUI
    \HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\DownloadUI

    Nota: DownloadUI es un valor de cadena. El valor es el CLSID del objeto COM del Administrador de descarga.
Para una implementación detallada, consulte la sección "Ejemplo de código" del artículo.

Nota: El enfoque de IServiceProvider no funciona cuando haga clic en un vínculo y, a continuación, haga clic en
Guardar destino como. Registrar el Administrador de descargas DLL siempre funciona.

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y service packs que se necesitan para este procedimiento:
  • Microsoft Visual Studio 6
  • Microsoft Internet Explorer 5.5 Service Pack 2 y versiones posterior

Descargar encabezados y bibliotecas

Debe descargar los encabezados de Internet Explorer y bibliotecas para Internet Explorer 5.5 e Internet Explorer 6 y, a continuación, agregarlos a los directorios include y biblioteca. Para ello, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):

Para Internet Explorer 5.5Para Internet Explorer 6

Ejemplo de código

Internet Explorer 5.5
// This is a custom download manager implementation for Internet Explorer 5.5 SP2.#include "downloadmgr.h"
STDMETHOD(QueryService)(REFGUID guidService,REFIID riid,void** ppv)
{
HRESULT hr = E_NOINTERFACE;
if (guidService == SID_SDownloadManager && riid == IID_IDownloadManager)
{
// Create a new CDownloadMgr object by using ATL.
CComObject<CDownloadMgr>* pDownloadMgr;
hr = CComObject<CDownloadMgr>::CreateInstance(&pDownloadMgr);
// Query the new CDownloadMgr object for the IDownloadManager interface.
hr = pDownloadMgr->QueryInterface(IID_IDownloadManager, ppv);
// Call the Download method.

// -or-

// Call the Download method directly if you implement it in this class.
// Download(NULL,NULL,0,0,NULL,NULL,NULL,0);
// hr = S_OK;
}

return hr;
}

Internet Explorer 6
// This is the custom download manager implementation for Internet Explorer 6 or later.// In the .h file of the COM DLL.
#include "downloadmgr.h"
STDMETHOD(Download)(IMoniker* pmk,
IBindCtx* pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO* pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP );
// In the .cpp file.
STDMETHODIMP CDownload::Download(IMoniker* pmk,
IBindCtx* pbc,
DWORD dwBindVerb,
LONG grfBINDF,
BINDINFO* pBindInfo,
LPCOLESTR pszHeaders,
LPCOLESTR pszRedir,
UINT uiCP )
{
::MessageBox(NULL,"Download","Download Manager",MB_OK);
return S_OK;
}

Propiedades

Id. de artículo: 327865 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios