Comment implémenter des gestionnaires de superposition d’icônes
Les gestionnaires de superposition d’icônes sont des objets COM (Component Object Model) in-process, implémentés en tant que DLL. Ils exportent une interface en plus de IUnknown : IShellIconOverlayIdentifier. Cette interface comporte trois méthodes : IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriority et IShellIconOverlayIdentifier::IsMemberOf.
La méthode GetOverlayInfo est d’abord appelée lors de l’initialisation. La méthode retourne le chemin complet du fichier qui contient l’image de superposition d’icônes et son index de base zéro dans le fichier. L’interpréteur de commandes ajoute ensuite l’image à la liste d’images système. Les superpositions d’icônes peuvent être contenues dans n’importe quel type de fichier standard, y compris .exe, .dll et .ico.
Une fois l’initialisation terminée, l’interpréteur de commandes appelle GetOverlayInfo lorsqu’il doit afficher la superposition d’icônes du gestionnaire. La méthode doit retourner le même nom de fichier et le même index que lors de l’initialisation. Bien que l’interpréteur de commandes utilise l’image mise en cache dans la liste d’images système au lieu de charger l’image à partir du fichier, une superposition d’icônes est toujours identifiée par son nom de fichier et son index.
La méthode GetPriority est appelée uniquement pendant l’initialisation. Il affecte une valeur de priorité à la superposition d’icônes du gestionnaire. La valeur peut être comprise entre zéro et 100, où 100 est la priorité la plus basse. L’objectif de cette valeur de priorité est d’aider l’interpréteur de commandes à résoudre le conflit qui se produit lorsque plusieurs superpositions d’icônes sont spécifiées pour un seul objet. L’interpréteur de commandes utilise d’abord un ensemble interne de règles pour déterminer la superposition d’icônes de priorité la plus élevée. Si ces règles ne résolvent pas le conflit, les valeurs affectées aux superpositions d’icônes par GetPriority déterminent la priorité.
La valeur de priorité définie par GetPriority n’est pas un moyen fiable de résoudre les conflits entre les gestionnaires de superposition d’icônes non liés. Il n’existe aucun moyen pour votre gestionnaire de déterminer les valeurs de priorité que d’autres gestionnaires utilisent. Normalement, vous devez définir la valeur sur zéro. Toutefois, la valeur de priorité est utile lorsque vous avez implémenté au moins deux gestionnaires de superposition d’icônes qui peuvent demander la superposition d’icônes pour le même objet. En définissant les valeurs de priorité de manière appropriée, vous pouvez spécifier les superpositions d’icônes demandées qui seront affichées.
L’interpréteur de commandes appelle la méthode IsMemberOf pour déterminer si elle doit afficher la superposition d’icônes d’un gestionnaire pour un objet particulier. L’interpréteur de commandes spécifie l’objet en passant son nom à la méthode . Si un gestionnaire souhaite afficher sa superposition d’icônes, IsMemberOf retourne S_OK. Si ce n’est pas le cas, elle retourne S_FALSE.
Les gestionnaires de superposition d’icônes sont normalement destinés à fonctionner avec un groupe particulier de fichiers. Un type de fichier, identifié par une extension de nom de fichier spécifique, en est un exemple classique. Un gestionnaire de superposition d’icônes peut demander une superposition d’icônes pour tous les fichiers du type de fichier. Certains gestionnaires demandent une superposition d’icônes uniquement si un fichier du type de fichier est dans un état particulier. Toutefois, les gestionnaires de superposition d’icônes sont libres de demander leur superposition d’icônes pour tout objet de leur choix.