プロパティ シート ハンドラー
ユーザーがシェル オブジェクトを右クリックすると、通常表示されるショートカット メニューには [プロパティ ] 項目が含まれます。 その項目を選択すると、ユーザーがオブジェクトのプロパティを表示したり、場合によっては変更したりできるプロパティ シートが起動します。 プロパティ シート ハンドラーを実装して登録することで、この プロパティ シートをカスタマイズできます。
シェル拡張ハンドラーを実装および登録するための一般的な手順については、「 シェル拡張ハンドラーの作成」を参照してください。 このドキュメントでは、プロパティ シート ハンドラーに固有の実装のこれらの側面について説明します。
プロパティ シート ハンドラーのしくみ
次の図は、Windows XP テキスト ファイルのプロパティ シートを示しています。
この図は、任意のファイルに表示される既定のプロパティ シートを示しています。 このようなプロパティ シートの多くでは、プロパティ シート ハンドラーを実装して登録することで、1 つ以上のページをプロパティ シートに追加できます。
プロパティ シート ハンドラーは、 ファイルの種類に最も一般的に登録されます。 各ハンドラーは、 クラスの Properties プロパティ シートに 1 つのカスタム ページを追加できます。 通常、これらのページを使用すると、ユーザーは特定のファイルの種類に固有のプロパティにアクセスできます。 たとえば、テキスト ドキュメントで構成されるファイルの種類では、タイトルと作成者を一覧表示するページと、ドキュメントの要約を表示できます。 この種類のプロパティ シート ハンドラーの特殊なケースは、マウントされたドライブの Properties プロパティ シートにページを追加するために使用されます。
プロパティ シート ハンドラーのもう 1 つの用途は、コントロール パネル アプリケーションによって表示されるプロパティ シート内のページを置き換える方法です。 たとえば、マウスの製造元は、プロパティ シート ハンドラーを使用して、コントロール パネルの [マウスのプロパティ] プロパティ シートの [ボタン] ページを、マウスの特性に合わせてカスタマイズされたページに置き換えることができます。
すべてのシェル拡張ハンドラーと同様に、プロパティ シート ハンドラーは、DLL として実装されるインプロセス コンポーネント オブジェクト モデル (COM) オブジェクトです。 IUnknown に加えて、IShellExtInit と IShellPropSheetExt の 2 つのインターフェイスをエクスポートする必要があります。
IShellExtInit インターフェイスは、ハンドラーを初期化するためにシェルによって使用されます。 シェルは 、IShellExtInit::Initialize を呼び出すと、オブジェクトの名前と、ファイルを含むフォルダーの項目識別子リスト (PIDL) へのポインターを持つデータ オブジェクトを渡します。 hRegKey パラメーターは、プロパティ シート ハンドラーでは使用されません。 IShellExtInit::Initialize メソッドは、データ オブジェクトからファイル名を抽出し、後で使用するために名前とフォルダーの PIDL を格納する必要があります。 詳細については、「シェル拡張ハンドラーの作成」の「IShellExtInit の実装」セクションを参照してください。
操作の残りの部分は、ハンドラーの IShellPropSheetExt インターフェイスを介して行われます。 プロパティ シートがファイルの種類に関連付けられている場合、シェルは IShellPropSheetExt::AddPages を呼び出して、ハンドラーがプロパティ シートにページを追加できるようにします。 プロパティ シートがコントロール パネル アプリケーションに関連付けられている場合、シェルは IShellPropSheetExt::ReplacePage を呼び出して、ハンドラーがページを置き換えることを許可します。
マウントされたドライブのプロパティ シート ハンドラーの登録と実装
マウントされた各ドライブには、ユーザーが表示できる [プロパティ] シートがあります。 次の図は、CD-ROM ドライブの Properties プロパティ シートを示しています。
ドライブとしてマウントできるさまざまなデバイスがあります。 ディスク ドライブ用に設計された既定のプロパティ シートは、一部のデバイスでは不十分な場合があるため、プロパティ シート ハンドラーを実装して、マウントされたデバイスに固有のページを追加できます。 この種類のプロパティ シート ハンドラーの基本的な実装は、「ファイルの種類の プロパティ シート ハンドラーを登録および実装する方法」で説明したのと同じですが、2 つの例外があります。
- ハンドラーの IShellExtInit::Initialize メソッドに渡されるデータ オブジェクトには、CF_HDROP形式ではなく 、CFSTR_MOUNTEDVOLUME 形式のドライブ パスが含 まれている場合があります。 CF_HDROP形式は、デバイスがドライブ文字にマウントされるときに使用されます。 CFSTR_MOUNTEDVOLUME形式は、リモート デバイスがドライブ文字ではなくフォルダーにマウントされるときに NTFS ファイル システムで使用されます。
- ハンドラーの GUID は、 HKEY_CLASSES_ROOT\Drive\shellex\PropertySheetHandlers キーの下に登録されます。
関連トピック