Pictogrammen, voorbeelden en snelmenu's toevoegen
Om ervoor te zorgen dat uw gegevens tijdens zoekopdrachten correct worden geïndexeerd en aan de gebruiker worden gepresenteerd, moet u Shell-gegevensarchieven (ook wel bekend als Shell-naamruimteextensies) en handlers voor bestandstypen (ook wel Shell-extensies genoemd, extensiehandlersof Shell-extensie-handlers) implementeren.
In dit onderwerp worden de volgende interfaces beschreven:
Handlers voor bestandstypen implementeren
Deze Shell-extensies of handlers voor bestandstypen bieden uw gebruikers de volgende Shell-ervaringen:
- In de resultatenweergave wordt een specifiek pictogram voor uw itemtype weergegeven.
- In de resultatenweergave wordt een voorbeeld van het item weergegeven wanneer de gebruiker het item selecteert.
- Gebruikers kunnen dubbelklikken op items om gebeurtenissen te starten, zoals het openen van het bestand.
- Gebruikers kunnen met de rechtermuisknop op items klikken om toegang te krijgen tot een snelmenu (contextmenu).
- Gebruikers kunnen items slepen en neerzetten.
Net als alle COM-objecten (Component Object Model) moeten handlers van bestandstypen een IUnknown interface en een klassefactory implementeren.
In Windows XP of eerder moeten handlers ook het volgende implementeren:
In Windows Vista zijn IPersistFile Interface en IShellExtInit Interface vervangen door de volgende drie interfaces voor Shell om de handler te initialiseren:
Als u een redelijke gebruikerservaring wilt bieden, moet u een Shell-gegevensarchief met uw protocolhandler opgeven. Dat gegevensarchief fungeert vervolgens als de 'factory' voor pictogramhandlers, snelmenuhandlers, preview-handlers, enzovoort. Minimale implementaties van IPersist Interface en IPersistFolder Interface zijn vereist voor IShellFolder Interfaceen er is een minimale implementatie van de IShellFolder-interface vereist voor de IContextMenu- en IExtractIcon-.
Notitie
Dezelfde klasse-id (CLSID) moet worden geïmplementeerd voor IPersist-, IPersistFolder en IShellFolder-.
Voor meer informatie over het maken van een Shell-gegevensarchief ter ondersteuning van een protocol-handler, zie De Basic Folder Object Interfaces implementeren.
IPersist
De IPersist-interface definieert de enkele methode GetClassID, die is ontworpen om de CLSID van een object te leveren dat permanent in het systeem kan worden opgeslagen.
Methode | Beschrijving |
---|---|
GetClassID | Retourneert de CLSID van het Shell-gegevensarchiefobject |
IPersistFolder
De interface IPersistFolder wordt gebruikt om Shell-mapobjecten te initialiseren. Implementatie van deze interface, die is afgeleid van IPersist, is hoe de map wordt verteld waar deze zich in de Shell-naamruimte bevindt. U gebruikt deze interface niet rechtstreeks. Het wordt gebruikt door de bestandssysteem-implementatie van IShellFolder::BindToObject-methode wanneer een Shell-mapobject wordt geïnitialiseerd.
Methode | Beschrijving |
---|---|
Initialiseren | Instrueert een Shell-mapobject om zichzelf te initialiseren op basis van de doorgegeven informatie en retourneert S_OK |
IShellFolder
De IShellFolder Interface interface wordt gebruikt voor het beheren van mappen en er is een gedeeltelijke implementatie vereist, zodat het pictogram en de contextinterfaces die zijn geïmplementeerd voor een protocolhandler correct werken in de gebruikersinterface van de Windows Search-resultaten. De meeste vereiste functionaliteit wordt weergegeven via de methode GetUIObjectOf. Met deze methode kan een invoegtoepassing een query uitvoeren op de IExtractIcon- en IContextMenu-interfaces.
De IShellFolder Interface interface maakt gebruik van PIDLs in plaats van URL's. In tegenstelling tot de vereisten van een volledig Shell-gegevensarchief kunnen invoegtoepassingen een eenvoudige IDL-structuur gebruiken die alleen de URL bevat.
De volgende methoden van IShellFolder Interface moeten worden geïmplementeerd. Vijf van deze methoden vereisen minimale implementatie.
Methode | Beschrijving |
---|---|
BindToObject | Retourneert E_NOTIMPL |
BindToStorage | Retourneert E_NOTIMPL |
CreateViewObject | Retourneert E_NOTIMPL |
SetNameOf | Retourneert E_NOTIMPL |
ParseDisplayName | Converteert een URL naar de PIDL-structuur |
VergelijkID's | Vergelijkt twee PIDL-waarden |
GetDisplayNameOf | Retourneert de URL voor een PIDL |
GetUIObjectOf | Deze methode is vergelijkbaar met de methode IUnknown::QueryInterface. Als er een pictogram wordt aangevraagd, vraagt de beller de IID_IExtractIcon; als een snelmenu wordt aangevraagd, vraagt de beller de IID_IContextMenu |
IShellFolder- wordt niet gebruikt om mappen op te sommen. Dit betekent dat de weergavenaam van een map de fysieke URL is. Dit kan in de toekomst veranderen.
IContextMenu
Wanneer Windows Search resultaten weergeeft aan de gebruiker, kan de gebruiker met de rechtermuisknop op een item klikken en een snelmenu zien dat is gedefinieerd door uw IContextMenu interface. Snelmenu's worden ook wel contextmenu's genoemd.
De standaardactie in het contextmenu is dezelfde actie die wordt ondernomen wanneer op het item wordt gedubbelklikt. Zonder de bijbehorende IShellFolder of IContextMenu interfaces voor het item, is het standaardgedrag voor een dubbelklikgebeurtenis het doorgeven van de URL als argument aan de ShellExecute-functie functie.
Raadpleeg Contextmenuhandlers maken voor meer informatie over het maken van snelmenuhandlers en Voorbeeld: Shell Extensions for Protocol Handlers voor voorbeeldcode.
IExtractIcon
IExtractIcon haalt een pictogram op voor de Gebruikersinterface van Windows Search op basis van de URL in de PIDL van uw protocolhandler.
Raadpleeg Pictogramhandlers maken voor meer informatie over het maken van pictogramhandlers en voorbeeld: Shell Extensions for Protocol Handlers voor voorbeeldcode.
IPreviewHandler
De IPreviewHandler geeft een uitgebreid voorbeeld weer van een geselecteerd item in Windows Verkenner. Previews zijn beschikbaar in Windows Search 4.0 of in Windows Vista met Windows Desktop Search 3.x.
Een aangepaste preview-handler maken:
Implementeer een IPreviewHandler die een IStreamgebruikt, volgens de richtlijnen in Preview Handlers.
Registreer uw preview-handler:
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>}
Voer de volgende twee stappen uit om een Shell-map voor uw URL te implementeren:
In IShellFolder::GetUIObjectOf-methode, verwerkt u IQueryAssociations en retourneert u de koppeling voor uw Shell-items, zoals wordt weergegeven in het volgende codevoorbeeld.
CComPtr<IQueryAssociations> spqa; AssocCreate(CLSID_QueryAssociations, __uuidof(IQueryAssociations), &spqa); spqa->Init(0, L"Your_Object_Type", NULL, NULL); spqa->QueryInterface(riid, ppvReturn);
Nadat de Shell de Shell-map voor de gegevensstroom heeft opgevraagd om de preview-handler te initialiseren, gaat u naar uw IShellFolder::BindToObject-methode methode, verwerkt u IID_IStream en retourneert u een IStream- naar uw URL.
Als u een bestaande preview-handler voor uw bestandstype opnieuw wilt gebruiken, volgt u deze twee stappen:
- Registreer die preview-handler voor uw bestandstype met behulp van de CLSID van de bestaande preview-handler in plaats van <Your_PreviewHandler_GUID>.
- Implementeer een Shell-map.
Zie IPreviewHandler en Preview-handlersvoor meer informatie over het maken van preview-handlers.
Aanvullende informatiebronnen
- Zie Het indexeringsprocesvoor een overzicht van het indexeringsproces.
- Zie Shell-extensies registreren, Shell-extensiehandlers maken, contextmenu, Shell-naamruimteextensies en preview-handlersvoor meer informatie over het maken van handlers.
Verwante onderwerpen
-
conceptuele