IShellIconOverlayIdentifier
COM公式ドキュメント
アイコンオーバーレイハンドラーとシェルの間のすべての通信を処理するメソッドを公開します。
解説(Remarks)
アイコンオーバーレイは、Windows エクスプローラーやデスクトップ上でシェルオブジェクトを表すアイコンの左下隅に配置される小さな画像です。オブジェクトの通常のアイコンに追加情報を付与するために使用されます。よく使われるアイコンオーバーレイの例として、ファイルやフォルダーが実際にはリンクであることを示す小さな矢印があります。アイコンオーバーレイハンドラーを実装して登録することで、シェルオブジェクトにカスタムのアイコンオーバーレイを指定できます。
アイコンオーバーレイハンドラーは、特定のアイコンオーバーレイに関連付けられた Component Object Model (COM) オブジェクトです。アイコンオーバーレイハンドラーの一般的な説明については、How to Implement Icon Overlay Handlers を参照してください。
このインターフェイスは、すべてのアイコンオーバーレイハンドラーで実装する必要があります。
このインターフェイスは、通常アプリケーションから呼び出されることはありません。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
アイコンオーバーレイをシェルオブジェクトのアイコンに追加すべきかどうかを指定します。
| pwszPath | LPWSTR | in | シェルオブジェクトの完全修飾パスを含む Unicode 文字列。 |
| dwAttrib | DWORD | in | オブジェクトの属性。ファイル属性とそれに関連するフラグの完全な一覧については、File Attribute Constants を参照してください。 |
戻り値
型: HRESULT
このメソッドは、次のいずれかを返します。
| 戻り値 | 説明 |
|---|---|
| アイコンオーバーレイを表示すべきである。 | |
| アイコンオーバーレイを表示すべきではない。 | |
| 操作が失敗した。 |
解説(Remarks)
シェルは、特定のオブジェクトに対してハンドラーのアイコンオーバーレイを表示すべきかどうかを判断するために、このメソッドを呼び出します。アイコンオーバーレイハンドラーは通常、特定のファイル群を対象として動作するように設計されています。典型的な例は、特定のファイル名拡張子によって識別されるファイルの種類です。アイコンオーバーレイハンドラーは、そのファイルの種類に属するすべてのメンバーに対してアイコンオーバーレイを要求することがあります。ハンドラーによっては、ファイルの種類のメンバーが特定の状態にある場合にのみアイコンオーバーレイを要求するものもあります。ただし、アイコンオーバーレイハンドラーは、任意のオブジェクトに対して自由にアイコンオーバーレイを要求できます。
アイコンオーバーレイのビットマップの場所を提供します。
| pwszIconFile | LPWSTR | out | アイコンを含むファイルの完全修飾パスを含む、null 終端の Unicode 文字列。.dll、.exe、.ico のいずれのファイル形式も使用できます。ファイル名を返す場合は、pdwFlags に ISIOI_ICONFILE フラグを設定する必要があります。 |
| cchMax | INT | in | pwszIconFile バッファーのサイズ (Unicode 文字数)。 |
| pIndex | INT* | out | 複数のアイコンを含むファイル内でアイコンを識別するために使用するインデックス値へのポインター。インデックスを返す場合は、pdwFlags に ISIOI_ICONINDEX フラグを設定する必要があります。 |
| pdwFlags | DWORD* | out | メソッドが返す情報を指定するビットマップへのポインター。このパラメーターには、次の値のいずれか一方または両方を指定できます。 ISIOI_ICONFILE (0x00000001)アイコンファイルのパスが pwszIconFile を通じて返されます。 ISIOI_ICONINDEX (0x00000002)pwszIconFile に複数のアイコンが含まれています。アイコンのインデックスが pIndex を通じて返されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、ハンドラーのアイコンオーバーレイをシステムイメージリストに追加できるようにするために、起動時にシェルから呼び出されます。初期化が完了した後、シェルはハンドラーのアイコンオーバーレイを表示する必要があるときに GetOverlayInfo を呼び出します。
アイコンオーバーレイの優先度を指定します。
| pPriority | INT* | out | オーバーレイ識別子の優先度を示す値のアドレス。指定できる値は 0 から 100 の範囲で、0 が最も高い優先度です。 |
戻り値
型: HRESULT
成功した場合は S_OK を返し、それ以外の場合は COM エラーコードを返します。
解説(Remarks)
あるオブジェクトに対して複数のアイコンオーバーレイが利用可能な場合、最も優先度の高いものが選択されます。シェルには、多くのケースについて優先度を決定する一連の内部ルールがあります。GetPriority が返す値は、シェルの内部ルールが適用されないケースで使用されます。通常は、この値を 0 に設定してください。ただし、同じオブジェクトに対してアイコンオーバーレイアイコンを要求できるアイコンオーバーレイハンドラーを 2 つ以上実装している場合には、優先度の値が役立ちます。優先度の値を適切に設定することで、要求されたアイコンオーバーレイのうちどれを表示するかを指定できます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellIconOverlayIdentifier "{0C6C4200-C589-11D0-999A-00C04FD655E1}" #usecom global IShellIconOverlayIdentifier IID_IShellIconOverlayIdentifier "{}" #comfunc global IShellIconOverlayIdentifier_IsMemberOf 3 wstr,int #comfunc global IShellIconOverlayIdentifier_GetOverlayInfo 4 var,int,var,var #comfunc global IShellIconOverlayIdentifier_GetPriority 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IShellIconOverlayIdentifier "{0C6C4200-C589-11D0-999A-00C04FD655E1}" #usecom global IShellIconOverlayIdentifier IID_IShellIconOverlayIdentifier "{}" #comfunc global IShellIconOverlayIdentifier_IsMemberOf 3 wstr,int #comfunc global IShellIconOverlayIdentifier_GetOverlayInfo 4 sptr,int,sptr,sptr #comfunc global IShellIconOverlayIdentifier_GetPriority 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。