Werken met Shell-extensies

De mogelijkheden van de Shell kunnen worden uitgebreid met registervermeldingen en .ini bestanden. Hoewel deze benadering voor het uitbreiden van de Shell eenvoudig is en voldoende is voor veel doeleinden, is dit beperkt. Als u bijvoorbeeld het register gebruikt om een aangepast pictogram voor een bestandstype op te geven, wordt hetzelfde pictogram weergegeven voor elk bestand van dat type. Als u de Shell met het register uitbreidt, kunt u het pictogram voor verschillende leden van het bestandstype niet variëren. Andere aspecten van de Shell, zoals het Eigenschappen eigenschappenvenster dat kan worden weergegeven wanneer er met de rechtermuisknop op een bestand wordt geklikt, kan helemaal niet worden gewijzigd met het register.

Een krachtigere en flexibele benadering voor het uitbreiden van de Shell is het implementeren van shell-extensiehandlers. Deze handlers kunnen worden geïmplementeerd voor verschillende acties die de Shell kan uitvoeren. Voordat u de actie uitvoert, voert de Shell een query uit op de extensie-handler, zodat deze de mogelijkheid heeft om de actie te wijzigen. Een veelvoorkomend voorbeeld is een handler voor snelmenu-extensies. Als er een is geïmplementeerd voor een bestandstype, wordt er elke keer een query uitgevoerd wanneer een van de bestanden met de rechtermuisknop wordt geklikt. De handler kan vervolgens extra menu-items opgeven op basis van een bestand per bestand, in plaats van dezelfde set te hebben voor alle bestanden van dat bestandstype.

In deze reeks onderwerpen wordt beschreven hoe u de extensie-handlers implementeert waarmee u verschillende Shell-acties kunt wijzigen. De volgende handlers zijn gekoppeld aan een specifiek bestandstype en stellen u in staat per bestand op te geven.

Handler Beschrijving
snelmenuverwerker Aangeroepen voordat het snelmenu van een bestand wordt weergegeven. Hiermee kunt u items toevoegen aan het snelmenu op basis van een bestand per bestand.
gegevenshandler Aangeroepen wanneer een slepen-en-neerzetten-bewerking wordt uitgevoerd op Shell-objecten. Hiermee kunt u extra klembordindelingen aanbieden voor het neerzetdoel.
drop handler Aangeroepen wanneer een gegevensobject over een bestand wordt gesleept of op een bestand wordt neergezet. Hiermee kunt u een bestand tot een sleepdoel instellen.
icoonbeheerder Aangeroepen voordat het pictogram van een bestand wordt weergegeven. Hiermee kunt u het standaardpictogram van het bestand vervangen door een aangepast pictogram op bestandsbasis.
handler voor eigenschappenblad Aangeroepen vóór de eigenschappen van een object eigenschappenvenster wordt weergegeven. Hiermee kunt u pagina's toevoegen of vervangen.
miniatuurafbeeldingenbeheerder Biedt een afbeelding die het item vertegenwoordigt.
Infotip-handler Hiermee wordt pop-uptekst weergegeven wanneer de gebruiker de muisaanwijzer boven het object houdt.
metagegevenshandler Biedt lees- en schrijftoegang tot metagegevens (eigenschappen) die zijn opgeslagen in een bestand. Dit kan worden gebruikt om de detailweergave, infotips, de eigenschappenpagina en groeperingsfuncties uit te breiden.

 

Andere zijn niet gekoppeld aan een bepaald bestandstype, maar worden aangeroepen vóór sommige Shell-bewerkingen.

Handler Beschrijving
kolombeheerder Windows Verkenner roept deze functie aan voordat het de Details-weergave van een map toont. Hiermee kunt u aangepaste kolommen toevoegen aan de weergave Details.
Hook handler kopiëren Wordt aangeroepen wanneer een map of printerobject op het punt staat te worden verplaatst, gekopieerd, verwijderd of hernoemd. Hiermee kunt u de bewerking goedkeuren of vetoeren.
Slepen-en-neerzetten handler Wordt aangeroepen wanneer een bestand met de rechtermuisknop wordt gesleept. Hiermee kunt u het snelmenu wijzigen dat wordt weergegeven.
Pictogram-overlaybeheerder Aangeroepen voordat het pictogram van een bestand wordt weergegeven. Hiermee kunt u een overlay opgeven voor het pictogram van het bestand.
zoekverwerker Wordt aangeroepen om een zoekmachine te starten. Hiermee kunt u een aangepaste zoekmachine implementeren die toegankelijk is vanuit het menu Start of Windows Verkenner.

 

De details over het implementeren van specifieke extensie-handlers worden behandeld in de bovenstaande secties. Zie de volgende onderwerpen voor discussies over implementatieproblemen die gebruikelijk zijn voor alle Shell-extensie-handlers:

Note

Overwegingen voor beveiliging en stabiliteit: Shell-extensiehandlers zijn IN-process COM-DLL's die rechtstreeks worden geladen in het Explorer-proces (of elk proces dat als host fungeert voor de Shell). Een crash of vastloper in uw extensie zorgt ervoor dat Explorer voor alle gebruikers crasht of vastloopt.

Belangrijke vereisten:

  • Registreren bij ThreadingModel = Apartment - Shell-weergaven van Explorer worden uitgevoerd op een STA-thread. Het gebruik van Free of Both kan subtiele threading-bugs veroorzaken.
  • Ga correct om met DPI-bewustzijn — Explorer is per-monitor DPI-bewust. Extensies die uitgaan van een vaste DPI worden onjuist weergegeven op multi-monitorconfiguraties.
  • Voor verpakte (MSIX)-apps gebruikt u registratie op basis van manifesten via het desktop4:Extension element of een Sparse-pakket in plaats van registersleutels rechtstreeks te schrijven.
  • Overweeg of een eenvoudigere benadering (registratie van statische werkwoorden, .reg bestandskoppelingen of de Windows. Storage.Provider-API's) kunnen aan uw behoeften voldoen voordat u een volledige COM Shell-extensie implementeert.