Come implementare gestori di sovrimpressione icona

I gestori di sovrapposizione delle icone sono oggetti COM (Component Object Model) in-process, implementati come DLL. Esportano un'interfaccia oltre a IUnknown: IShellIconOverlayIdentifier. Questa interfaccia include tre metodi: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriority e IShellIconOverlayIdentifier::IsMemberOf.

Istruzioni

Passaggio 1: Implementazione di GetOverlayInfo

Il metodo GetOverlayInfo viene chiamato per primo durante l'inizializzazione. Il metodo restituisce il percorso completo del file che contiene l'immagine di sovrapposizione dell'icona e il relativo indice in base zero all'interno del file. Shell aggiunge quindi l'immagine all'elenco di immagini di sistema. Le sovrimpressioni delle icone possono essere contenute in qualsiasi tipo di file standard, tra cui .exe, .dll e ico.

Al termine dell'inizializzazione, Shell chiama GetOverlayInfo quando deve visualizzare la sovrimpressione dell'icona del gestore. Il metodo deve restituire lo stesso nome file e lo stesso indice eseguito durante l'inizializzazione. Anche se shell usa l'immagine memorizzata nella cache nell'elenco di immagini di sistema anziché caricare l'immagine dal file, una sovrimpressione dell'icona viene ancora identificata dal nome file e dall'indice.

Passaggio 2: Implementazione di GetPriority

Il metodo GetPriority viene chiamato solo durante l'inizializzazione. Assegna un valore di priorità alla sovrimpressione dell'icona del gestore. Il valore può variare da zero a 100, dove 100 è la priorità più bassa. Lo scopo di questo valore di priorità è aiutare shell a risolvere il conflitto che si verifica quando vengono specificate più sovrapposizioni di icone per un singolo oggetto. Shell usa innanzitutto un set interno di regole per determinare la sovrimpressione dell'icona con priorità più alta. Se queste regole non risolvono il conflitto, i valori assegnati all'icona sovrimpressione da GetPriority determinano la priorità.

Il valore di priorità impostato da GetPriority non è un modo affidabile per risolvere i conflitti tra gestori di sovrapposizione di icone non correlati. Non è possibile consentire al gestore di determinare quali valori di priorità usano altri gestori. In genere, è necessario impostare il valore su zero. Tuttavia, il valore di priorità è utile quando sono stati implementati due o più gestori di sovrapposizione di icone che possono richiedere icone di sovrapposizione di icone per lo stesso oggetto. Impostando i valori di priorità in modo appropriato, è possibile specificare quali sovrapposizioni di icone richieste verranno visualizzate.

Passaggio 3: Implementazione di IsMemberOf

Shell chiama il metodo IsMemberOf per determinare se deve visualizzare la sovrimpressione dell'icona di un gestore per un determinato oggetto. Shell specifica l'oggetto passandone il nome al metodo . Se un gestore vuole visualizzare la sovrapposizione dell'icona, IsMemberOf restituisce S_OK. In caso contrario, restituisce S_FALSE.

I gestori di sovrapposizione delle icone sono in genere progettati per funzionare con un determinato gruppo di file. Un esempio tipico è un tipo di file, identificato da un'estensione di file specifica. Un gestore di sovrapposizione di icone può richiedere una sovrapposizione di icone per tutti i file del tipo di file. Alcuni gestori richiedono una sovrapposizione di icone solo se un file del tipo di file è in uno stato specifico. Tuttavia, i gestori di sovrapposizione delle icone sono liberi di richiedere la sovrapposizione dell'icona per qualsiasi oggetto scelto.