Erstellen von Copy Hook-Handlern

Die allgemeinen Verfahren zum Implementieren und Registrieren eines Shellerweiterungshandlers werden unter Erstellen von Shellerweiterungshandlern erläutert. Dieses Dokument konzentriert sich auf die Aspekte der Implementierung, die speziell für Kopierhookhandler gelten.

Anweisungen

Schritt 1: Implementieren von Copy Hook-Handlern

Wie alle Shell-Erweiterungshandler sind Kopierhakenhandler prozessinterne COM-Objekte (Component Object Model), die als DLLs implementiert sind. Sie exportieren eine Schnittstelle zusätzlich zu IUnknown: ICopyHook. Die Shell initialisiert den Handler direkt, sodass keine Initialisierungsschnittstelle wie IShellExtInit erforderlich ist.

Die ICopyHook-Schnittstelle verfügt über eine einzelne Methode, ICopyHook::CopyCallback. Wenn ein Ordner verschoben werden soll, ruft die Shell diese Methode auf. Es übergibt eine Vielzahl von Informationen, einschließlich:

  • Der Name des Ordners.
  • Das Ziel oder der neue Name des Ordners.
  • Der Vorgang, der versucht wird.
  • Die Attribute der Quell- und Zielordner.
  • Ein Fensterhandle, das zum Anzeigen einer Benutzeroberfläche verwendet werden kann.

Wenn die ICopyHook::CopyCallback-Methode des Handlers aufgerufen wird, gibt sie einen der drei folgenden Werte zurück, um der Shell anzugeben, wie der Vorgang fortgesetzt werden soll.

Wert BESCHREIBUNG
IDYES Ermöglicht den Vorgang.
IDNO Verhindert den Vorgang für diesen Ordner. Die Shell kann mit allen anderen Genehmigten Vorgängen fortfahren, z. B. einem Batchkopiervorgang.
IDCANCEL Verhindert den aktuellen Vorgang und bricht alle ausstehenden Vorgänge ab.

 

Schritt 2: Registrieren von Copy Hook-Handlern

Kopierhookhandler für Ordner werden unter dem Unterschlüssel HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers registriert. Erstellen Sie einen Unterschlüssel von CopyHookHandlers mit dem Namen für den Handler, und legen Sie den Standardwert des Unterschlüssels auf die Zeichenfolgenform der CLSID-GUID (Class Identifier) des Handlers fest.

Im folgenden Beispiel wird der Unterschlüssel MyCopyHandler der Liste der Kopierhookhandler der Shell hinzugefügt.

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

Kopierhakenhandler für Druckerobjekte werden im Wesentlichen auf die gleiche Weise registriert. Der einzige Unterschied besteht darin, dass Sie sie unter dem Unterschlüssel HKEY_CLASSES_ROOT\Printers registrieren müssen.

Bemerkungen

Normalerweise können Benutzer und Anwendungen Ordner mit wenigen Einschränkungen kopieren, verschieben, löschen oder umbenennen. Durch die Implementierung eines Kopierhookshandlers können Sie steuern, ob diese Vorgänge ausgeführt werden. Bei instance können Sie durch die Implementierung eines solchen Handlers verhindern, dass wichtige Ordner umbenannt oder gelöscht werden. Kopierhakenhandler können auch für Druckerobjekte implementiert werden.

Kopierhakenhandler sind global. Die Shell ruft alle registrierten Handler auf, wenn eine Anwendung oder ein Benutzer versucht, einen Ordner oder ein Druckerobjekt zu kopieren, zu verschieben, zu löschen oder umzubenennen. Der Handler führt den Vorgang selbst nicht aus. Sie genehmigt oder vetoiert sie nur. Wenn alle Handler genehmigen, führt die Shell den Vorgang aus. Wenn ein Handler ein Veto gegen den Vorgang eingibt, wird er abgebrochen, und die verbleibenden Handler werden nicht aufgerufen. Kopierhookhandler werden nicht über den Erfolg oder Fehler des Vorgangs informiert, sodass sie nicht zum Überwachen von Dateivorgängen verwendet werden können.

Erstellen von Shellerweiterungshandlern

ICopyHook