データ ハンドラーを作成する方法
ファイルがクリップボードにコピーされるか、ドラッグ アンド ドロップされると、シェルはさまざまな標準 クリップボード形式をサポートするデータ オブジェクトを作成します。 特定のファイルの種類のファイルの場合は、 データ ハンドラーを実装して登録することで、使用可能なクリップボード形式を拡張できます。 ファイルの種類のファイルが転送されると、カスタム形式のいずれかが使用されている場合、シェルはデータ オブジェクトの IDataObject インターフェイスへの呼び出しをデータ ハンドラーに委任します。
シェル拡張ハンドラーを実装および登録するための一般的な手順については、「 シェル拡張ハンドラーの作成」を参照してください。 このドキュメントでは、データ ハンドラーに固有の実装の側面に焦点を当てています。
Instructions
手順 1: データ ハンドラーの実装
すべてのシェル拡張ハンドラーと同様に、データ ハンドラーは DLL として実装されたインプロセス コンポーネント オブジェクト モデル (COM) オブジェクトです。 IUnknown に加えて、IPersistFile と IDataObject という 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}
関連トピック