Создание обработчиков данных
Когда файл копируется в буфер обмена или перетаскивается, оболочка создает объект данных, поддерживающий различные стандартные форматы буфера обмена. Для файлов определенного типа можно расширить доступные форматы буфера обмена, реализовав и зарегистрировав обработчик данных. При передаче файла этого типа оболочка делегирует вызовы интерфейса IDataObject объекта данных обработчику данных, если используется один из настраиваемых форматов.
Общие процедуры реализации и регистрации обработчика расширений оболочки рассматриваются в разделе Создание обработчиков расширений оболочки. В этом документе рассматриваются аспекты реализации, относящиеся к обработчикам данных.
Инструкции
Шаг 1. Реализация обработчиков данных
Как и все обработчики расширений оболочки, обработчики данных являются внутрипроцессными объектами модели COM, реализованными в виде библиотек DLL. В дополнение к IUnknown они экспортируют два интерфейса: IPersistFile и IDataObject.
Оболочка инициализирует обработчик с помощью интерфейса IPersistFile . Он использует этот интерфейс для запроса идентификатора класса обработчика (CLSID) и предоставляет ему имя файла. Общие сведения о реализации обработчиков расширений оболочки, включая интерфейс IPersistFile , см. в разделе Создание обработчиков расширений оболочки.
После инициализации обработчика данных оболочка делегирует вызовы из объекта данных в интерфейс IDataObject обработчика, если используется один из настраиваемых форматов.
Шаг 2. Регистрация обработчиков данных
Обработчики данных регистрируются в подразделе ProgID типа файла, как показано ниже: HKEY_CLASSES_ROOT\ProgID\shellex\DataHandler
Создайте подраздел с именем для обработчика в разделе DataHandler и задайте значение по умолчанию подраздела этого обработчика в строковой форме идентификатора GUID CLSID обработчика. Общие сведения о регистрации обработчиков расширений оболочки см. в разделе Создание обработчиков расширений оболочки.
В следующем примере показаны записи реестра, которые позволяют использовать обработчик данных для примера myp-файла.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
CLSID
{00000000-1111-2222-3333-444444444444}
InProcServer32
(Default) = C:\MyDir\MyCommand.dll
ThreadingModel = Apartment
MyProgram.1
(Default) = MyProgram Application
Shellex
DataHandler
(Default) = {00000000-1111-2222-3333-444444444444}
Связанные темы