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.
Verwante onderwerpen