Guide pratique pour créer des gestionnaires de crochet de copie
Les procédures générales d’implémentation et d’inscription d’un gestionnaire d’extensions Shell sont décrites dans Création de gestionnaires d’extensions Shell. Ce document se concentre sur les aspects de l’implémentation qui sont spécifiques aux gestionnaires de hook de copie.
- Implémentation des gestionnaires de crochet de copie
- Inscription des gestionnaires de crochet de copie
- Rubriques connexes
Instructions
Étape 1 : Implémentation des gestionnaires de raccordement de copie
Comme tous les gestionnaires d’extension Shell, les gestionnaires de raccordement de copie sont des objets COM (Component Object Model) in-process implémentés en tant que DLL. Ils exportent une interface en plus de IUnknown : ICopyHook. L’interpréteur de commandes initialise directement le gestionnaire. Il n’est donc pas nécessaire d’utiliser une interface d’initialisation telle que IShellExtInit.
L’interface ICopyHook a une seule méthode, ICopyHook::CopyCallback. Lorsqu’un dossier est sur le point d’être déplacé, l’interpréteur de commandes appelle cette méthode. Il transmet une variété d’informations, notamment :
- Nom du dossier.
- La destination ou le nouveau nom du dossier.
- Opération tentée.
- Attributs des dossiers source et de destination.
- Handle de fenêtre qui peut être utilisé pour afficher une interface utilisateur.
Lorsque la méthode ICopyHook::CopyCallback de votre gestionnaire est appelée, elle retourne l’une des trois valeurs suivantes pour indiquer à l’interpréteur de commandes comment procéder.
Valeur | Description |
---|---|
IDYES | Autorise l’opération. |
IDNO | Empêche l’opération sur ce dossier. L’interpréteur de commandes peut continuer avec toutes les autres opérations qui ont été approuvées, telles qu’une opération de copie par lots. |
IDCANCEL | Empêche l’opération en cours et annule toutes les opérations en attente. |
Étape 2 : Inscription des gestionnaires de crochet de copie
Les gestionnaires de hook de copie pour les dossiers sont inscrits sous la sous-clé HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers . Créez une sous-clé de CopyHookHandlers nommée pour le gestionnaire et définissez la valeur par défaut de la sous-clé sur la forme de chaîne du GUID d’identificateur de classe (CLSID) du gestionnaire.
L’exemple suivant ajoute la sous-clé MyCopyHandler à la liste des gestionnaires de hook de copie de l’interpréteur de commandes.
HKEY_CLASSES_ROOT
Directory
shellex
CopyHookHandlers
MyCopyHandler
(Default) = {MyCopyHandler CLSID GUID}
Les gestionnaires de raccordement de copie pour les objets imprimante sont inscrits essentiellement de la même façon. La seule différence est que vous devez les inscrire sous la sous-clé imprimantes HKEY_CLASSES_ROOT\.
Notes
Normalement, les utilisateurs et les applications peuvent copier, déplacer, supprimer ou renommer des dossiers avec quelques restrictions. En implémentant un gestionnaire de hook de copie, vous pouvez contrôler si ces opérations ont lieu. Par instance, l’implémentation d’un tel gestionnaire vous permet d’empêcher le renommage ou la suppression de dossiers critiques. Les gestionnaires de raccordement de copie peuvent également être implémentés pour les objets d’imprimante.
Les gestionnaires de raccordement de copie sont globaux. L’interpréteur de commandes appelle tous les gestionnaires inscrits chaque fois qu’une application ou un utilisateur tente de copier, déplacer, supprimer ou renommer un dossier ou un objet imprimante. Le gestionnaire n’effectue pas l’opération elle-même. Il ne fait que l’approuver ou y opposer son veto. Si tous les gestionnaires approuvent, l’interpréteur de commandes effectue l’opération. Si un gestionnaire met son veto à l’opération, celle-ci est annulée et les gestionnaires restants ne sont pas appelés. Les gestionnaires de raccordement de copie ne sont pas informés de la réussite ou de l’échec de l’opération, ils ne peuvent donc pas être utilisés pour surveiller les opérations de fichiers.
Rubriques connexes