Delen via


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:

  1. Implementeer een IPreviewHandler die een IStreamgebruikt, volgens de richtlijnen in Preview Handlers.

  2. 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>}
    
  3. Voer de volgende twee stappen uit om een Shell-map voor uw URL te implementeren:

    1. 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);
      
    2. 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:

  1. Registreer die preview-handler voor uw bestandstype met behulp van de CLSID van de bestaande preview-handler in plaats van <Your_PreviewHandler_GUID>.
  2. Implementeer een Shell-map.

Zie IPreviewHandler en Preview-handlersvoor meer informatie over het maken van preview-handlers.

Aanvullende informatiebronnen

conceptuele

Protocolhandlers ontwikkelen

Begrijpen van Protocolhandlers

de index van wijzigingen melden

codevoorbeeld: Shell-extensies voor protocolhandlers

Installeren en registreren van Protocol Handlers

Een zoekconnector maken voor een protocolhandler

Foutopsporingsprotocolhandlers