アイコン オーバーレイ ハンドラーを実装する方法
アイコン オーバーレイ ハンドラーは、DLL として実装されるインプロセス コンポーネント オブジェクト モデル (COM) オブジェクトです。 IUnknownに加えて、IShellIconOverlayIdentifierという 1 つのインターフェイスをエクスポートします。 このインターフェイスには、IShellIconOverlayIdentifier::GetOverlayInfo、IShellIconOverlayIdentifier::GetPriority、IShellIconOverlayIdentifier::IsMemberOfの3 つのメソッドがあります。
指示書
手順 1: GetOverlayInfo の実装
GetOverlayInfo メソッドは、初期化時に最初に呼び出されます。 このメソッドは、アイコン オーバーレイ イメージを含むファイルの完全修飾パスと、ファイル内の 0 から始まるインデックスを返します。 その後、シェルはイメージをシステム イメージリストに追加します。 アイコン オーバーレイは、.exe、.dll、.icoなど、任意の標準ファイルの種類に含めることができます。
初期化が完了すると、Shellがハンドラーのアイコンオーバーレイを表示する必要がある時に、のGetOverlayInfo を呼び出します。 このメソッドは、初期化中に行ったのと同じファイル名とインデックスを返す必要があります。 シェルでは、ファイルからイメージを読み込むのではなく、システム イメージ リストにキャッシュされているイメージが使用されますが、アイコン オーバーレイはファイル名とインデックスによって識別されます。
手順 2: GetPriority の実装
GetPriority メソッドは、初期化中にのみ呼び出されます。 ハンドラーのアイコン オーバーレイに優先順位の値が割り当てられます。 値の範囲は 0 から 100 までです。100 が最も低い優先度です。 この優先度値の目的は、1 つのオブジェクトに複数のアイコン オーバーレイが指定されている場合に発生する競合をシェルが解決できるようにすることです。 シェルは、最初に内部のルール セットを使用して、最も優先度の高いアイコン オーバーレイを決定します。 これらのルールで競合が解決されない場合、アイコン オーバーレイに割り当てた値は 、GetPriority によって優先順位が決まります。
GetPriority によって設定された優先度の値は、関連のないアイコン オーバーレイ ハンドラー間の競合を解決する信頼性の高い方法ではありません。 ハンドラーが他のハンドラーが使用している優先度値を決定する方法はありません。 通常は、値を 0 に設定する必要があります。 ただし、優先度の値は、同じオブジェクトのアイコン オーバーレイ アイコンを要求できる 2 つ以上のアイコン オーバーレイ ハンドラーを実装している場合に便利です。 優先度の値を適切に設定することで、要求されたアイコン オーバーレイを表示する対象を指定できます。
手順 3: IsMemberOf の実装
シェルは、IsMemberOf メソッドを呼び出して、特定のオブジェクトのハンドラーのアイコン オーバーレイを表示するかどうかを判断します。 シェルは、その名前をメソッドに渡すことによってオブジェクトを指定します。 ハンドラーがアイコンオーバーレイを表示したい場合、IsMemberOf が S_OK を返します。 そうでない場合は、S_FALSEを返します。
アイコン オーバーレイ ハンドラーは通常、特定のファイル グループを操作することを目的としています。 典型的な例は、特定のファイル名拡張子で識別される ファイルの種類です。 アイコン オーバーレイ ハンドラーは、ファイルの種類のすべてのファイルのアイコン オーバーレイを要求できます。 一部のハンドラーは、ファイルの種類のファイルが特定の状態の場合にのみアイコン オーバーレイを要求します。 ただし、アイコン オーバーレイ ハンドラーは、選択した任意のオブジェクトのアイコン オーバーレイを自由に要求できます。