Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Общие процедуры реализации и регистрации обработчика расширений оболочки рассматриваются в Создание обработчиков расширений оболочки. В этом документе рассматриваются те аспекты реализации, которые относятся к обработчикам перехватчиков копирования.
Инструкции
Шаг 1. Реализация обработчиков копирования
Как и все обработчики расширений оболочки, обработчики функции копирования являются объектами Компонентной Объектной Модели (COM), реализуемые как DLL. Они экспортируют один интерфейс в дополнение к IUnknown: ICopyHook. Оболочка инициализирует обработчик напрямую, поэтому нет необходимости в интерфейсе инициализации, например IShellExtInit.
Интерфейс ICopyHook имеет один метод ICopyHook::CopyCallback. Когда папка собирается быть перемещена, оболочка вызывает этот метод. Он передает различные сведения, в том числе:
- Имя папки.
- Назначение папки или новое имя.
- Операция, которая выполняется.
- Атрибуты исходных и целевых папок.
- Дескриптор окна, который можно использовать для отображения пользовательского интерфейса.
Когда вызывается метод ICopyHook::CopyCallback обработчика, он возвращает одно из трех следующих значений, чтобы указать оболочке, как следует действовать.
| Ценность | Описание |
|---|---|
| IDYES | Разрешает операцию. |
| IDNO | Запрещает операцию в этой папке. Оболочка может продолжать любые другие утвержденные операции, такие как, например, операция пакетного копирования. |
| IDCANCEL | Запрещает текущую операцию и отменяет все ожидающие операции. |
Шаг 2: Регистрация обработчиков Copy Hook
Копировальные хуки-обработчики для папок регистрируются в подразделе HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers. Создайте подраздел CopyHookHandlers, названный в честь обработчика, и задайте значение по умолчанию подраздела как строковую форму идентификатора класса обработчика (CLSID) GUID.
В следующем примере добавляется подраздел MyCopyHandler в список hook-обработчиков копирования Shell.
HKEY_CLASSES_ROOT
Directory
shellex
CopyHookHandlers
MyCopyHandler
(Default) = {MyCopyHandler CLSID GUID}
Обработчики копирования для объектов принтера регистрируются фактически таким же образом. Единственное различие заключается в том, что их необходимо зарегистрировать в подразделе "Принтеры HKEY_CLASSES_ROOT\".
Замечания
Как правило, пользователи и приложения могут копировать, перемещать, удалять или переименовать папки с небольшими ограничениями. Реализуя обработчик копирования, вы можете контролировать выполнение этих операций. Например, реализация такого обработчика позволяет предотвратить переименование или удаление критически важных папок. Обработчики хуков для копирования также можно реализовать для объектов принтера.
Обработчики хуков являются глобальными. Оболочка вызывает все зарегистрированные обработчики каждый раз, когда приложение или пользователь пытается скопировать, переместить, удалить или переименовать папку или объект принтера. Обработчик не выполняет саму операцию. Он только утверждает или накладывает вето. Если все обработчики подтверждают, Shell выполняет операцию. Если любой обработчик ветоирует операцию, он отменяется, а остальные обработчики не вызываются. Обработчики перехватчиков копирования не уведомляются об успешном выполнении или сбое операции, поэтому их нельзя использовать для мониторинга операций с файлами.
Связанные разделы