データ ハンドラーを作成する方法

ファイルがクリップボードにコピーされるか、ドラッグ アンド ドロップされると、シェルはさまざまな標準 クリップボード形式をサポートするデータ オブジェクトを作成します。 特定のファイルの種類のファイルの場合は、 データ ハンドラーを実装して登録することで、使用可能なクリップボード形式を拡張できます。 ファイルの種類のファイルが転送されると、カスタム形式のいずれかが使用されている場合、シェルはデータ オブジェクトの IDataObject インターフェイスへの呼び出しをデータ ハンドラーに委任します。

シェル拡張ハンドラーを実装および登録するための一般的な手順については、「 シェル拡張ハンドラーの作成」を参照してください。 このドキュメントでは、データ ハンドラーに固有の実装の側面に焦点を当てています。

Instructions

手順 1: データ ハンドラーの実装

すべてのシェル拡張ハンドラーと同様に、データ ハンドラーは DLL として実装されたインプロセス コンポーネント オブジェクト モデル (COM) オブジェクトです。 IUnknown に加えて、IPersistFileIDataObject という 2 つのインターフェイスをエクスポートします。

シェルは、 IPersistFile インターフェイスを使用してハンドラーを初期化します。 このインターフェイスを使用してハンドラーのクラス識別子 (CLSID) を要求し、ファイルの名前を指定します。 IPersistFile インターフェイスを含むシェル拡張ハンドラーを実装する方法の一般的な説明については、「シェル拡張ハンドラーの作成」を参照してください。

データ ハンドラーが初期化されると、カスタム形式のいずれかが使用されている場合、シェルはデータ オブジェクトからハンドラーの IDataObject インターフェイスへの呼び出しを委任します。

手順 2: データ ハンドラーを登録する

データ ハンドラーは、次に示すように、ファイルの種類の ProgID サブキーの下に登録 されます。HKEY_CLASSES_ROOT\ProgID\shellex\DataHandler

DataHandler でハンドラーの という名前のサブキーを作成し、そのハンドラーのサブキーの既定値をハンドラーの CLSID GUID の文字列形式に設定します。 シェル拡張ハンドラーを登録する方法の一般的な説明については、「 シェル拡張ハンドラーの作成」を参照してください。

次の例は、.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}

シェル拡張機能ハンドラーの作成

IPersistFile

Idataobject