Cómo implementar controladores de superposición de iconos

Los controladores de superposición de iconos son objetos del Modelo de objetos componentes (COM) en proceso, implementados como archivos DLL. Exportan una interfaz además de IUnknown: IShellIconOverlayIdentifier. Esta interfaz tiene tres métodos: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriority e IShellIconOverlayIdentifier::IsMemberOf.

Instrucciones

Paso 1: Implementar GetOverlayInfo

El método GetOverlayInfo se llama primero durante la inicialización. El método devuelve la ruta de acceso completa del archivo que contiene la imagen de superposición de icono y su índice de base cero dentro del archivo. A continuación, Shell agrega la imagen a la lista de imágenes del sistema. Las superposiciones de iconos se pueden incluir en cualquiera de los tipos de archivo estándar, incluidos .exe, .dll y .ico.

Una vez completada la inicialización, shell llama a GetOverlayInfo cuando necesita mostrar la superposición del icono del controlador. El método debe devolver el mismo nombre de archivo e índice que hizo durante la inicialización. Aunque shell usa la imagen almacenada en caché en la lista de imágenes del sistema en lugar de cargar la imagen desde el archivo, su nombre de archivo y su índice siguen identificando una superposición de iconos.

Paso 2: Implementar GetPriority

Solo se llama al método GetPriority durante la inicialización. Asigna un valor de prioridad a la superposición del icono del controlador. El valor puede oscilar entre cero y 100, donde 100 es la prioridad más baja. El propósito de este valor de prioridad es ayudar al Shell a resolver el conflicto que surge cuando se especifican varias superposiciones de icono para un único objeto. El Shell usa primero un conjunto interno de reglas para determinar la superposición del icono de prioridad más alta. Si estas reglas no resuelven el conflicto, los valores asignados al icono superpuestos por GetPriority determinan la prioridad.

El valor de prioridad establecido por GetPriority no es una manera confiable de resolver conflictos entre controladores de superposición de iconos no relacionados. No hay ninguna manera de que el controlador determine qué valores de prioridad usan otros controladores. Normalmente, debe establecer el valor en cero. Sin embargo, el valor de prioridad es útil cuando se han implementado dos o más controladores de superposición de iconos que pueden solicitar iconos de superposición de iconos para el mismo objeto. Al establecer los valores de prioridad correctamente, puede especificar cuál de las superposiciones de icono solicitadas se mostrará.

Paso 3: Implementar IsMemberOf

Shell llama al método IsMemberOf para determinar si debe mostrar la superposición de icono de un controlador para un objeto determinado. Shell especifica el objeto pasando su nombre al método . Si un controlador quiere mostrar su superposición de icono, IsMemberOf devuelve S_OK. Si no es así, devuelve S_FALSE.

Normalmente, los controladores de superposición de iconos están diseñados para trabajar con un grupo determinado de archivos. Un ejemplo típico es un tipo de archivo, identificado por una extensión de nombre de archivo específica. Un controlador de superposición de iconos puede solicitar una superposición de iconos para todos los archivos del tipo de archivo. Algunos controladores solicitan una superposición de icono solo si un archivo del tipo de archivo está en un estado determinado. Sin embargo, los controladores de superposición de iconos pueden solicitar su superposición de iconos para cualquier objeto que elijan.