IPropertyDescriptionList
COM公式ドキュメント
リストとして提示されるプロパティ記述のコレクションから情報を抽出するメソッドを公開します。
解説(Remarks)
プロパティの順序付きリストは、詳細ウィンドウやインフォチップなど、さまざまな UI 位置に表示するプロパティを選択するために使用されます。IPropertyDescriptionList インターフェイスは、そのようなリスト内の個々のプロパティへのアクセスを提供します。
IPropertyDescriptionList を実装するサブシステムオブジェクトのインスタンスを取得するには、IShellItem2 インターフェイスを取得して IShellItem2::GetPropertyDescriptionList を呼び出すか、リストを文字列形式で取得して PSGetPropertyDescriptionListFromString を呼び出します。
プロパティ記述リストを文字列形式で取得するには、PKEY_PropList キーのいずれかを指定して IShellItem2::GetString を呼び出します。たとえば、PKEY_PropList_InfoTip(System.PropList.InfoTip)は、インフォチップに表示するのに適したプロパティリストの文字列形式を返します。アイテムから複数の値を読み取る場合は、アイテムが複数回再オープンされないように、PKEY_PropList キーを指定して IPropertyStore::GetValue を呼び出す方が効率的です。ファイルタイプのプロパティリスト文字列を登録する方法の詳細については、Property Lists を参照してください。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
プロパティリストに含まれるプロパティの数を取得します。
| pcElem | DWORD* | out | このメソッドから制御が戻るとき、プロパティの数へのポインターが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
プロパティ記述リスト内の指定されたインデックスにあるプロパティ記述を取得します。
| iElem | DWORD | in | リスト文字列内のプロパティの番号。 |
| riid | GUID* | in | 要求するプロパティ記述インターフェイスの IID への参照。通常は IID_IPropertyDescription です。 |
| ppv | void** | out | このメソッドから制御が戻るとき、riid で要求されたインターフェイスポインターが格納されます。通常は IPropertyDescription です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
riid パラメーターと ppv パラメーターをまとめるには、objbase.h で定義されている IID_PPV_ARGS マクロを使用することをお勧めします。このマクロは、ppv の値が指すインターフェイスに基づいて正しい IID を提供し、コーディングエラーの可能性を排除します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPropertyDescriptionList "{1F9FC1D0-C39B-4B26-817F-011967D3440E}" #usecom global IPropertyDescriptionList IID_IPropertyDescriptionList "{}" #comfunc global IPropertyDescriptionList_GetCount 3 var #comfunc global IPropertyDescriptionList_GetAt 4 int,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IPropertyDescriptionList "{1F9FC1D0-C39B-4B26-817F-011967D3440E}" #usecom global IPropertyDescriptionList IID_IPropertyDescriptionList "{}" #comfunc global IPropertyDescriptionList_GetCount 3 sptr #comfunc global IPropertyDescriptionList_GetAt 4 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。