Hinzufügen von Symbolen, Vorschauen und Kontextmenüs
Um sicherzustellen, dass Ihre Daten bei Suchvorgängen ordnungsgemäß indiziert und dem Benutzer angezeigt werden, müssen Sie Shell-Datenspeicher (auch als Shell-Namespaceerweiterungen bezeichnet) und Dateityphandler (auch als Shellerweiterungen, Erweiterungshandler oder Shellerweiterungshandler bezeichnet) implementieren.
In diesem Thema werden die folgenden Schnittstellen beschrieben:
Implementieren von Dateityphandlern
Diese Shellerweiterungen oder Dateityphandler bieten Ihren Benutzern die folgenden Shell-Funktionen:
- In der Ergebnisansicht wird ein bestimmtes Symbol für Ihren Elementtyp angezeigt.
- Die Ergebnisansicht zeigt eine Vorschau des Elements an, wenn der Benutzer das Element auswählt.
- Benutzer können auf Elemente doppelklicken, um Ereignisse wie das Öffnen der Datei zu initiieren.
- Benutzer können mit der rechten Maustaste auf Elemente klicken, um auf ein Kontextmenü zuzugreifen.
- Benutzer können Elemente per Drag-and-Drop ablegen.
Wie alle COM-Objekte (Component Object Model) müssen Dateityphandler eine IUnknown-Schnittstelle und eine Klassenfactory implementieren.
In Windows XP oder früher sollten Handler auch Folgendes implementieren:
In Windows Vista wurden die IPersistFile-Schnittstelle und die IShellExtInit-Schnittstelle durch die folgenden drei Schnittstellen für Shell ersetzt, um den Handler zu initialisieren:
- IInitializeWithStream-Schnittstelle
- IInitializeWithItem-Schnittstelle
- IInitializeWithFile-Schnittstelle
Um eine angemessene Benutzerfreundlichkeit zu bieten, müssen Sie einen Shell-Datenspeicher mit Ihrem Protokollhandler bereitstellen. Dieser Datenspeicher dient dann als "Factory" für Symbolhandler, Kontextmenühandler, Vorschauhandler usw. Für IShellFolder Interface sind minimale Implementierungen von IPersist Interface und IPersistFolder Interface erforderlich, und für IContextMenu und IExtractIcon ist eine minimale Implementierung von IShellFolder Interface erforderlich.
Hinweis
Der gleiche Klassenbezeichner (CLSID) sollte für IPersist, IPersistFolder und IShellFolder implementiert werden.
Weitere Informationen zum Erstellen eines Shell-Datenspeichers zur Unterstützung eines Protokollhandlers finden Sie unter Implementieren der Grundlegenden Ordnerobjektschnittstellen.
Ipersist
Die IPersist-Schnittstelle definiert die einzelne Methode GetClassID, die für die Bereitstellung der CLSID eines Objekts konzipiert ist, das dauerhaft im System gespeichert werden kann.
Methode | BESCHREIBUNG |
---|---|
Getclassid | Gibt die CLSID des Shell-Datenspeicherobjekts zurück. |
IPersistFolder
Die IPersistFolder-Schnittstelle wird verwendet, um Shellordnerobjekte zu initialisieren. Bei der Implementierung dieser Schnittstelle, die von IPersist abgeleitet wird, wird dem Ordner mitgeteilt, wo er sich im Shell-Namespace befindet. Sie verwenden diese Schnittstelle nicht direkt. Es wird von der Dateisystemimplementierung der IShellFolder::BindToObject-Methode verwendet, wenn ein Shell-Ordnerobjekt initialisiert wird.
Methode | BESCHREIBUNG |
---|---|
Initialize | Weist ein Shell-Ordnerobjekt an, sich basierend auf den übergebenen Informationen zu initialisieren, und gibt S_OK |
IShellFolder
Die IShellFolder-Schnittstelle wird zum Verwalten von Ordnern verwendet, und eine teilweise Implementierung ist erforderlich, damit sich die für einen Protokollhandler implementierten Symbol- und Kontextschnittstellen in der Windows Search-Ergebnis-Benutzeroberfläche ordnungsgemäß verhalten. Die meisten der erforderlichen Funktionen werden über die GetUIObjectOf-Methode verfügbar gemacht. Mit dieser Methode kann ein Add-In die Schnittstellen IExtractIcon und IContextMenu abfragen.
Die IShellFolder-Schnittstelle verwendet PIDLs anstelle von URLs. Im Gegensatz zu den Anforderungen eines vollständigen Shell-Datenspeichers können Add-Ins eine einfache IDL-Struktur verwenden, die nur die URL enthält.
Die folgenden Methoden der IShellFolder-Schnittstelle müssen implementiert werden. Fünf dieser Methoden erfordern eine minimale Implementierung.
Methode | BESCHREIBUNG |
---|---|
BindToObject | Gibt E_NOTIMPL zurück |
BindToStorage | Gibt E_NOTIMPL zurück |
CreateViewObject | Gibt E_NOTIMPL zurück |
SetNameOf | Gibt E_NOTIMPL zurück |
ParseDisplayName | Konvertiert eine URL in die PIDL-Struktur |
CompareIDs | Vergleicht zwei PIDL-Werte |
GetDisplayNameOf | Gibt die URL für eine PIDL zurück. |
GetUIObjectOf | Diese Methode ähnelt der IUnknown::QueryInterface-Methode. Wenn ein Symbol angefordert wird, fordert der Aufrufer die IID_IExtractIcon an. Wenn ein Kontextmenü angefordert wird, fordert der Anrufer die IID_IContextMenu |
IShellFolder wird nicht zum Auflisten von Ordnern verwendet. Dies bedeutet, dass der Anzeigename eines Ordners die physische URL ist. Dies kann sich in Zukunft ändern.
IContextMenu
Wenn Windows Search dem Benutzer Ergebnisse anzeigt, kann der Benutzer mit der rechten Maustaste auf ein Element klicken und ein Kontextmenü anzeigen, das von Ihrer IContextMenu-Schnittstelle definiert ist. Kontextmenüs werden auch als Kontextmenüs bezeichnet.
Die Standardaktion im Kontextmenü ist dieselbe Aktion, die beim Doppelklicken auf das Element ausgeführt wird. Ohne die entsprechenden IShellFolder - oder IContextMenu-Schnittstellen für das Element besteht das Standardverhalten für ein Doppelklickereignis darin, die URL als Argument an die Funktion ShellExecute Function zu übergeben.
Weitere Informationen zum Erstellen von Kontextmenühandlern finden Sie unter Erstellen von Kontextmenühandlern und Beispiel: Shellerweiterungen für Protokollhandler für Beispielcode.
IExtractIcon
IExtractIcon ruft ein Symbol für die Windows Search-Benutzeroberfläche basierend auf der URL in der PIDL ab, die von Ihrem Protokollhandler bereitgestellt wird.
Weitere Informationen zum Erstellen von Symbolhandlern finden Sie unter Erstellen von Symbolhandlern und Beispiel: Shellerweiterungen für Protokollhandler für Beispielcode.
IPreviewHandler
Der IPreviewHandler rendert eine umfassende Vorschau eines ausgewählten Elements in Windows Explorer. Vorschauversionen sind in Windows Search 4.0 oder in Windows Vista mit Windows Desktop Search 3.x verfügbar.
So erstellen Sie einen benutzerdefinierten Vorschauhandler:
Implementieren Sie einen IPreviewHandler , der einen IStream verwendet, und befolgen Sie die Richtlinien unter Vorschauhandler.
Registrieren Sie Ihren Vorschauhandler:
HKEY_CLASSES_ROOT\<Your_Object_Type>
HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx
HKEY_CLASSES_ROOT\<Your_Object_Type>\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f} @ = {<Your_PreviewHandler_GUID>}
Führen Sie die folgenden beiden Schritte aus, um einen Shellordner für Ihre URL zu implementieren:
Behandeln Sie in IShellFolder::GetUIObjectOf MethodIQueryAssociations , und geben Sie Ihre Zuordnung für Ihre Shellelemente zurück, wie im folgenden Codebeispiel gezeigt.
CComPtr<IQueryAssociations> spqa; AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa); spqa->Init(0, L"Your_Object_Type", NULL, NULL); spqa->QueryInterface(riid, ppvReturn);
Nachdem die Shell Ihren Shell-Ordner nach dem Datenstrom abgefragt hat, um den Vorschauhandler zu initialisieren, wechseln Sie zu Ihrer IShellFolder::BindToObject-Methode , behandeln IID_IStream und geben einen IStream an Ihre URL zurück.
Führen Sie die folgenden beiden Schritte aus, um einen vorhandenen Vorschauhandler für Ihren Dateityp wiederzuverwenden:
- Registrieren Sie diesen Vorschauhandler für Ihren Dateityp mithilfe der CLSID des vorhandenen Vorschauhandlers anstelle von <Your_PreviewHandler_GUID>.
- Implementieren Sie einen Shellordner.
Weitere Informationen zum Erstellen von Vorschauhandlern finden Sie unter IPreviewHandler und Vorschauhandler.
Zusätzliche Ressourcen
- Eine Übersicht über den Indizierungsprozess finden Sie unter Der Indizierungsprozess.
- Informationen zum Erstellen von Handlern finden Sie unter Registrieren von Shellerweiterungen, Erstellen von Shellerweiterungshandlern, Kontextmenü, Shellnamespace-Erweiterungen und Vorschauhandlern.
Zugehörige Themen
-
Konzept