Implementieren von Symbolüberlagerungshandlern

Symbolüberlagerungshandler sind in Bearbeitung Component Object Model (COM)-Objekte, die als DLLs implementiert werden. Sie exportieren zusätzlich zu IUnknowneine Schnittstelle: IShellIconOverlayIdentifier. Diese Schnittstelle verfügt über drei Methoden: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriorityund IShellIconOverlayIdentifier::IsMemberOf.

Instructions

Schritt 1: Implementieren von GetOverlayInfo

Die GetOverlayInfo-Methode wird zuerst während der Initialisierung aufgerufen. Die -Methode gibt den vollqualifizierten Pfad der Datei zurück, die das Symbolüberlagerungsbild und den nullbasierten Index in der Datei enthält. Die Shell fügt das Image dann der Systemimageliste hinzu. Symbolüberlagerungen können in jedem der Standarddateitypen enthalten sein, einschließlich .exe, .dll und ICO.

Nach Abschluss der Initialisierung ruft die Shell GetOverlayInfo auf, wenn die Symbolüberlagerung des Handlers angezeigt werden muss. Die -Methode sollte den gleichen Dateinamen und Index zurückgeben wie bei der Initialisierung. Obwohl die Shell das In der Systemimageliste zwischengespeicherte Bild verwendet, anstatt das Bild aus der Datei zu laden, wird eine Symbolüberlagerung weiterhin durch ihren Dateinamen und Index identifiziert.

Schritt 2: Implementieren von GetPriority

Die GetPriority-Methode wird nur während der Initialisierung aufgerufen. Sie weist der Symbolüberlagerung des Handlers einen Prioritätswert zu. Der Wert kann zwischen 0 und 100 liegen, wobei 100 die niedrigste Priorität ist. Dieser Prioritätswert soll die Shell dabei unterstützen, den Konflikt zu lösen, der entsteht, wenn mehrere Symbolüberlagerungen für ein einzelnes Objekt angegeben werden. Die Shell verwendet zuerst einen internen Satz von Regeln, um die Symbolüberlagerung mit der höchsten Priorität zu bestimmen. Wenn diese Regeln den Konflikt nicht lösen, bestimmen die werte, die dem Symbol durch GetPriority zugewiesen werden, die Priorität.

Der von GetPriority festgelegte Prioritätswert ist keine zuverlässige Möglichkeit, Konflikte zwischen nicht verknüpften Symbolüberlagerungshandlern zu lösen. Es gibt keine Möglichkeit für den Handler, zu bestimmen, welche Prioritätswerte andere Handler verwenden. Normalerweise sollten Sie den Wert auf 0 (null) festlegen. Der Prioritätswert ist jedoch nützlich, wenn Sie zwei oder mehr Symbolüberlagerungshandler implementiert haben, die Symbolüberlagerungssymbole für dasselbe Objekt anfordern können. Indem Sie die Prioritätswerte entsprechend festlegen, können Sie angeben, welche der angeforderten Symbolüberlagerungen angezeigt werden.

Schritt 3: Implementieren von IsMemberOf

Die Shell ruft die IsMemberOf-Methode auf, um zu bestimmen, ob die Symbolüberlagerung eines Handlers für ein bestimmtes Objekt angezeigt werden soll. Die Shell gibt das -Objekt an, indem sein Name an die -Methode übergeben wird. Wenn ein Handler seine Symbolüberlagerung anzeigen möchte, gibt IsMemberOf S _ OK zurück. Wenn dies nicht der Fehler ist, wird S _ FALSE zurückgegeben.

Symbolüberlagerungshandler sind normalerweise für die Arbeit mit einer bestimmten Gruppe von Dateien vorgesehen. Ein typisches Beispiel ist ein Dateityp,der durch eine bestimmte Dateierweiterung identifiziert wird. Ein Symbolüberlagerungshandler kann eine Symbolüberlagerung für alle Dateien des Dateityps anfordern. Einige Handler fordern nur dann eine Symbolüberlagerung an, wenn sich eine Datei des Dateityps in einem bestimmten Zustand befindet. Symbolüberlagerungshandler können jedoch ihre Symbolüberlagerung für jedes objekt anfordern, das sie auswählen.