Compartir a través de


Agregar iconos y menús contextuales con extensiones de Shell

Nota

Windows Desktop Search 2.x es una tecnología obsoleta que originalmente estaba disponible como complemento para Windows XP y Windows Server 2003. En versiones posteriores, use Windows Search en su lugar.

Puede mejorar la experiencia de los usuarios con Microsoft Windows Desktop Search (WDS) y el controlador de protocolo mediante la implementación de extensiones de Shell. Sin más extensión, el controlador de protocolo que cree no incluirá las siguientes experiencias de usuario:

  • WDS no mostrará iconos específicos para los resultados.
  • Cuando los usuarios hacen doble clic en un elemento, la interfaz de usuario no responderá al evento.
  • Cuando los usuarios hacen clic con el botón derecho en un elemento, el menú contextual no admitirá ninguna operación para el elemento.

IShellFolder requiere implementaciones mínimas de IPersist e IPersistFolder, y se requiere una implementación mínima de IShellFolder para IContextMenu e IExtractIcon, las dos interfaces que proporcionan una experiencia de usuario más fluida.

 

IPersist

La interfaz IPersist define el método único GetClassID, que está diseñado para proporcionar el CLSID de un objeto que se puede almacenar de forma persistente en el sistema.

Método Descripción
GetClassID() Devuelve el ClassID del controlador de protocolo.

 

Nota

Se debe implementar el mismo CLSID para IPersist, IPersistFolder e IShellFolder.

 

 

IPersistFolder

La interfaz IPersistFolder se usa para inicializar objetos de carpeta de Shell. La implementación de esta interfaz, que se deriva de IPersist, es cómo se indica la carpeta donde se encuentra en el espacio de nombres de Shell.

Método Descripción
Initialize() Indica a un objeto de carpeta de Shell que se inicialice en función de la información pasada y devuelva S_OK

 

Nota

Se debe implementar el mismo CLSID para IPersist, IPersistFolder e IShellFolder.

 

No se usa esta interfaz directamente. Lo usa la implementación del sistema de archivos de la interfaz IShellFolder::BindToObject cuando inicializa un objeto de carpeta shell.

 

IShellFolder

La interfaz IShellFolder se usa para administrar carpetas y se requiere una implementación parcial para que las interfaces de icono y contexto implementadas para un controlador de protocolo se comporten correctamente en la interfaz de usuario de resultados de búsqueda de escritorio de Windows. La mayor parte de la funcionalidad necesaria se expone a través del método GetUIObjectOf . Este método permite a un complemento consultar las interfaces IExtractIcon e IContextMenu .

La interfaz IShellFolder usa PIN en lugar de direcciones URL. A diferencia de los requisitos de una extensión de espacio de nombres completa, los complementos pueden usar una estructura IDL simple que solo contiene la dirección URL.

Se deben implementar los métodos siguientes de IShellFolder . Tenga en cuenta que cinco de estos métodos requieren una implementación mínima.

Método Descripción
BindToObject() Devuelve E_NOTIMPL
BindToStorage() Devuelve E_NOTIMPL
CreateViewObject() Devuelve E_NOTIMPL
SetNameOf() Devuelve E_NOTIMPL
ParseDisplayName() Convierte una dirección URL en la estructura PIDL.
CompareIDs() Compara dos valores piDL
GetDisplayNameOf() Devuelve la dirección URL de un PIDL.
GetUIObjectOf() Este método es similar al método QueryInterface OLE COM. Si se solicita un icono, el autor de la llamada solicita el IID_IExtractIcon; Si se solicita un menú contextual, el autor de la llamada solicita el IID_IContextMenu.

 

Nota

Se debe implementar el mismo CLSID para IPersist, IPersistFolder e IShellFolder.

 

IShellFolder no se usa para enumerar carpetas. Esto significa que el nombre para mostrar de una carpeta será la dirección URL física. En el futuro, esto puede cambiar.

 

IContextMenu

Cuando WDS muestra los resultados al usuario, el usuario puede hacer clic con el botón derecho en un elemento y ver un menú contextual definido por la interfaz IContextMenu .

La acción predeterminada en el menú contextual es la misma acción que se realiza cuando se hace doble clic en el elemento. Sin las interfaces IShellFolder o IContextMenu correspondientes para el elemento, el comportamiento predeterminado de un evento de doble clic es pasar la dirección URL como argumento a la función ShellExecute.

 

IExtractIcon

IExtractIcon recupera un icono para la interfaz de usuario de WDS en función de la dirección URL del PIDL proporcionado por el controlador de protocolo.

 

Ejemplo de código

El código de ejemplo de interfaz de usuario del controlador de protocolo personalizado muestra una implementación de IShellFolder y interfaces auxiliares e incluye compatibilidad para manipular los PIDL.

Referencia

Código de ejemplo de interfaz de usuario del controlador de protocolo personalizado

Instalación y registro de controladores de protocolo