Delen via


Copy Hook Handlers maken

De algemene procedures voor het implementeren en registreren van een Shell-extensie-handler worden besproken in Shell Extension Handlers maken. Dit document richt zich op die aspecten van de implementatie die specifiek zijn voor copy-hook handlers.

Aanwijzingen

Stap 1: Implementatie van Copy Hook Handlers

Net als alle Shell-extensiebehandelaars zijn kopieerhaakbehandelaars COM-objecten (Component Object Model) die als DLL's zijn geïmplementeerd. Ze exporteren één interface naast IUnknown-: ICopyHook-. De Shell initialiseert de handler rechtstreeks, dus er is geen initialisatie-interface nodig, zoals IShellExtInit.

De ICopyHook interface heeft één methode, ICopyHook::CopyCallback. Wanneer een map op het punt staat te worden verplaatst, roept de Shell deze methode aan. Het geeft verschillende informatie door, waaronder:

  • De naam van de map.
  • De bestemming of nieuwe naam van de map.
  • De bewerking die wordt geprobeerd.
  • De kenmerken van de bron- en doelmappen.
  • Een venstergreep die kan worden gebruikt om een gebruikersinterface weer te geven.

Wanneer de methode ICopyHook::CopyCallback van uw handler wordt aangeroepen, wordt een van de drie volgende waarden geretourneerd om aan te geven aan de Shell hoe deze moet worden voortgezet.

Waarde Beschrijving
IDYES Het staat de bewerking toe.
IDNO Hiermee voorkomt u dat de bewerking in deze map wordt uitgevoerd. De Shell kan doorgaan met alle andere bewerkingen die zijn goedgekeurd, zoals een batchkopiebewerking.
Annuleren Hiermee voorkomt u dat de huidige bewerking wordt uitgevoerd en worden alle bewerkingen die in behandeling zijn, geannuleerd.

 

Stap 2: Het registreren van copy hook handlers

Kopiehookhandlers voor mappen worden geregistreerd onder de HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers subsleutel. Maak een subsleutel van CopyHookHandlers met de naam van de handler en stel de standaardwaarde van de subsleutel in op de tekenreeksvorm van de CLSID (Class Identifier) van de handler.

In het volgende voorbeeld wordt de subsleutel MyCopyHandler toegevoegd aan de lijst met kopieerhaakhandlers van de Shell.

HKEY_CLASSES_ROOT
   Directory
      shellex
         CopyHookHandlers
            MyCopyHandler
               (Default) = {MyCopyHandler CLSID GUID}

Kopieerhaakhandlers voor printerobjecten worden in wezen op dezelfde manier geregistreerd. Het enige verschil is dat u ze moet registreren onder de subsleutel HKEY_CLASSES_ROOT\Printers.

Opmerkingen

Normaal gesproken kunnen gebruikers en toepassingen mappen met enkele beperkingen kopiëren, verplaatsen, verwijderen of de naam ervan wijzigen. Door een kopieerhookhandler te implementeren, kunt u bepalen of deze bewerkingen plaatsvinden. Als u bijvoorbeeld een dergelijke handler implementeert, kunt u voorkomen dat de naam van kritieke mappen wordt gewijzigd of verwijderd. Kopieerhaakhandlers kunnen ook worden geïmplementeerd voor printerobjecten.

Kopieerhookverwerkers zijn globaal. De Shell roept alle geregistreerde handlers aan telkens wanneer een toepassing of gebruiker probeert een map of printerobject te kopiëren, verplaatsen, verwijderen of de naam ervan te wijzigen. De handler voert de bewerking zelf niet uit. Het keurt het alleen goed of vetoes het. Als alle handlers akkoord gaan, voert de Shell de bewerking uit. Als een handler de bewerking vetoot, wordt deze geannuleerd en worden de resterende handlers niet aangeroepen. Kopieerhookhandlers worden niet op de hoogte gesteld van het slagen of mislukken van de bewerking, zodat ze niet kunnen worden gebruikt om bestandsbewerkingen te bewaken.

Het creëren van shell-extensiehandlers

ICopyHook