アイコン オーバーレイ ハンドラーを実装する方法

アイコン オーバーレイ ハンドラーは、DLL として実装されるインプロセス コンポーネント オブジェクト モデル (COM) オブジェクトです。 IUnknown: IShellIconOverlayIdentifier に加えて、1 つのインターフェイスをエクスポートします。 このインターフェイスには、 IShellIconOverlayIdentifier::GetOverlayInfoIShellIconOverlayIdentifier::GetPriorityIShellIconOverlayIdentifier::IsMemberOf の 3 つのメソッドがあります。

Instructions

手順 1: GetOverlayInfo の実装

GetOverlayInfo メソッドは、初期化中に最初に呼び出されます。 メソッドは、アイコン オーバーレイ イメージを含むファイルの完全修飾パスと、ファイル内の 0 から始まるインデックスを返します。 その後、シェルはイメージをシステム イメージリストに追加します。 アイコン オーバーレイは、.exe、.dll、.ico など、標準のファイルの種類のいずれかに含めることができます。

初期化が完了すると、ハンドラーのアイコン オーバーレイを表示する必要があるときに、シェルによって GetOverlayInfo が呼び出されます。 メソッドは、初期化時と同じファイル名とインデックスを返す必要があります。 シェルは、ファイルからイメージを読み込むのではなく、システム イメージ リストにキャッシュされているイメージを使用しますが、アイコン オーバーレイは引き続きファイル名とインデックスによって識別されます。

手順 2: GetPriority の実装

GetPriority メソッドは、初期化中にのみ呼び出されます。 ハンドラーのアイコン オーバーレイに優先度値を割り当てます。 値の範囲は 0 から 100 です。100 が最も低い優先度です。 この優先度値の目的は、1 つのオブジェクトに対して複数のアイコン オーバーレイが指定されている場合に発生する競合をシェルが解決できるようにするためです。 シェルは、最初に内部ルール セットを使用して、最も優先度の高いアイコン オーバーレイを決定します。 これらのルールで競合が解決されない場合は、 GetPriority によってアイコン オーバーレイに割り当てられた値によって優先度が決定されます。

GetPriority によって設定された優先度値は、関連のないアイコン オーバーレイ ハンドラー間の競合を解決するための信頼性の高い方法ではありません。 ハンドラーが他のハンドラーで使用している優先度値を決定する方法はありません。 通常は、値を 0 に設定する必要があります。 ただし、優先度の値は、同じオブジェクトのアイコン オーバーレイ アイコンを要求できる 2 つ以上のアイコン オーバーレイ ハンドラーを実装している場合に便利です。 優先度の値を適切に設定することで、要求されたアイコン オーバーレイのうち、どのオーバーレイを表示するかを指定できます。

手順 3: IsMemberOf の実装

シェルは IsMemberOf メソッドを呼び出して、特定のオブジェクトのハンドラーのアイコン オーバーレイを表示するかどうかを判断します。 シェルは、その名前を メソッドに渡すことによって、オブジェクトを指定します。 ハンドラーのアイコン オーバーレイを表示する場合、 IsMemberOf は S_OKを返します。 そうでない場合は、S_FALSEを返します。

アイコン オーバーレイ ハンドラーは通常、特定のファイル グループを操作することを目的としています。 一般的な例は、 特定のファイル名拡張子で識別されるファイルの種類です。 アイコン オーバーレイ ハンドラーは、ファイルの種類のすべてのファイルのアイコン オーバーレイを要求できます。 一部のハンドラーは、ファイルの種類のファイルが特定の状態の場合にのみアイコン オーバーレイを要求します。 ただし、アイコン オーバーレイ ハンドラーは、選択したオブジェクトのアイコン オーバーレイを自由に要求できます。