IShellIcon
COM公式ドキュメント
IShellFolder オブジェクトのアイコンインデックスを取得するメソッドを公開します。
解説(Remarks)
IShellFolder の実装を作成する際に IShellIcon を実装すると、フォルダー内のオブジェクトのアイコンを迅速に取得する方法を提供できます。
IShellIcon が IShellFolder オブジェクトで実装されていない場合、すべてのオブジェクトのアイコンの取得には IShellFolder::GetUIObjectOf が使用されます。
Shell フォルダー内の項目のアイコンインデックスを取得するときは IShellIcon を使用します。
IShellIcon を使用すると、アプリケーションはインターフェイスのインスタンスを 1 つだけ使って、フォルダー内の任意のオブジェクトのアイコンを取得できます。一方、IExtractIcon では、オブジェクトごとにインターフェイスの個別のインスタンスを作成する必要があります。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
特定のフォルダー内にあるオブジェクトのアイコンを取得します。
| pidl | ITEMIDLIST* | in | フォルダーの相対的な位置を指定する ITEMIDLIST 構造体のアドレスです。 |
| flags | DWORD | in | アイコンをどのように表示するかを指定するフラグです。このパラメーターには、0、または次のいずれかの値を指定できます。 GIL_FORSHELLアイコンを Shell フォルダーに表示します。 GIL_OPENICON開いた状態と閉じた状態の両方のイメージが利用できる場合、アイコンを開いた状態にします。このフラグが指定されていない場合、アイコンは閉じた状態になります。このフラグは通常、フォルダーオブジェクトに使用されます。 |
| pIconIndex | INT* | out | システムイメージリスト内のアイコンのインデックスのアドレスです。次の標準イメージリストインデックスを返すことができます。 0ドキュメント (空白ページ、関連付けなし) 1ドキュメント (ページ上にデータあり) 2アプリケーション (ファイル名の拡張子は .exe、.com、または .bat である必要があります) 3フォルダー (通常) 4フォルダー (開いた状態) |
戻り値
型: HRESULT
lpIconIndex に正しいシステムイメージリストインデックスが格納されている場合は S_OK を返し、このオブジェクトのアイコンを取得できない場合は S_FALSE を返します。
解説(Remarks)
GetIconOf を使用してこのオブジェクトのアイコンを取得できない場合は、GetUIObjectOf メソッドを使用して、Extract メソッドをサポートするオブジェクトを取得します。
CoInitialize が最初に呼び出されていない場合、IShellIcon::GetIconOf は失敗します。
呼び出し側アプリケーションへの注意
返されるインデックスは、システムイメージリストのものです。実装者への注意
使用するアイコンインデックスが上記の標準イメージのいずれでもない場合、そのイメージをシステムイメージリストに追加し、そのインデックスを lpIconIndex パラメーターに設定するのは実装者の責任です。システムイメージリストが大きくなりすぎないようにするため、各イメージは一度だけ追加してください。Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellIcon "{000214E5-0000-0000-C000-000000000046}" #usecom global IShellIcon IID_IShellIcon "{}" #comfunc global IShellIcon_GetIconOf 3 var,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IShellIcon "{000214E5-0000-0000-C000-000000000046}" #usecom global IShellIcon IID_IShellIcon "{}" #comfunc global IShellIcon_GetIconOf 3 sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。