Implementieren von Symbolüberlagerungshandlern

Symbolüberlagerungshandler sind prozessinterne COM-Objekte (Component Object Model), die als DLLs implementiert sind. Sie exportieren eine Schnittstelle zusätzlich zu IUnknown: IShellIconOverlayIdentifier. Diese Schnittstelle verfügt über drei Methoden: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriority und IShellIconOverlayIdentifier::IsMemberOf.

Anweisungen

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 enthält, und ihren nullbasierten Index in der Datei. 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 denselben Dateinamen und Index zurückgeben wie bei der Initialisierung. Obwohl die Shell das Image verwendet, das in der Systemimageliste zwischengespeichert wird, anstatt das Bild aus der Datei zu laden, wird eine Symbolüberlagerung dennoch durch ihren Dateinamen und index identifiziert.

Schritt 2: Implementieren von GetPriority

Die GetPriority-Methode wird nur während der Initialisierung aufgerufen. Der Symbolüberlagerung des Handlers wird ein Prioritätswert zugewiesen. Der Wert kann zwischen null und 100 liegen, wobei 100 die niedrigste Priorität ist. Der Zweck dieses Prioritätswerts besteht darin, die Shell dabei zu unterstützen, den Konflikt zu lösen, der entsteht, wenn mehrere Symbolüberlagerungen für ein einzelnes Objekt angegeben werden. Die Shell verwendet zunächst 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 den Symbolüberlagerungen von GetPriority zugewiesen sind, 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. Der Handler kann nicht ermitteln, welche Prioritätswerte andere Handler verwenden. Normalerweise sollten Sie den Wert auf 0 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 wird.

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 es seinen Namen an die -Methode übergibt. Wenn für einen Handler die Symbolüberlagerung angezeigt werden soll, gibt IsMemberOf S_OK zurück. Andernfalls 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 Dateinamenerweiterung 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 ausgewählte Objekt anfordern.