如何创建数据处理程序

将文件复制到剪贴板或拖放时,Shell 会创建支持各种标准 剪贴板格式的数据对象。 对于特定文件类型的文件,可以通过实现和注册 数据处理程序来扩展可用的剪贴板格式。 传输文件类型时,如果使用其中一种自定义格式,Shell 会将对数据对象的 IDataObject 接口的调用委托给数据处理程序。

创建 Shell 扩展处理程序中讨论了实现和注册 Shell 扩展处理程序的一般过程。 本文档重点介绍特定于数据处理程序的实现的那些方面。

Instructions

步骤 1:实现数据处理程序

与所有 Shell 扩展处理程序一样,数据处理程序是作为 DLL 实现 (COM) 对象实现的进程内组件对象模型。 除了 IUnknown 之外,它们还导出两个接口: IPersistFileIDataObject

Shell 通过其 IPersistFile 接口初始化处理程序。 它使用此接口 (CLSID) 请求处理程序的类标识符,并为其提供文件的名称。 有关如何实现 Shell 扩展处理程序(包括 IPersistFile 接口)的一般讨论,请参阅 创建 Shell 扩展处理程序

初始化数据处理程序后,如果使用其中一种自定义格式,则 Shell 会委托从数据对象调用处理程序的 IDataObject 接口。

步骤 2:注册数据处理程序

数据处理程序在文件类型的 ProgID 子项下注册,如下所示: HKEY_CLASSES_ROOT\ProgID\shellex\DataHandler

DataHandler 下的处理程序创建名为 的子项,并将该处理程序的子项的默认值设置为处理程序的 CLSID GUID 的字符串形式。 有关如何注册 Shell 扩展处理程序的一般讨论,请参阅 创建 Shell 扩展处理程序

以下示例演示了为示例 .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}

创建 Shell 扩展处理程序

IPersistFile

IDataObject