IShellItem2
COM公式ドキュメント
IShellItem を拡張し、アイテムのさまざまなプロパティ値を取得するメソッドを提供します。新しいコードでアイテムを表現する場合は、IShellItem および IShellItem2 を使用することが推奨されます。
メソッド 13
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したプロパティストアフラグに対応するプロパティストアオブジェクトを取得します。
| flags | GETPROPERTYSTOREFLAGS | in | プロパティストアオブジェクトを変更する GETPROPERTYSTOREFLAGS 定数。 |
| riid | GUID* | in | 取得するオブジェクトの IID への参照。 |
| ppv | void** | out | このメソッドが返るときに、IPropertyStore インターフェイスポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
CoCreateInstance ではなく、指定した ICreateObject を使用して、このメソッドを呼び出した Shell アイテムに関連付けられたプロパティハンドラーのインスタンスを作成します。
| flags | GETPROPERTYSTOREFLAGS | in | プロパティストアオブジェクトを変更する GETPROPERTYSTOREFLAGS 定数。 |
| punkCreateObject | IUnknown* | in | ICreateObject 型の、低い権限でオブジェクトを作成するためのファクトリーへのポインター。 CreateObject メソッドは、COM オブジェクトのインスタンスを作成します。IShellItem2::GetPropertyStoreWithCreateObject の実装では、指定されたファイルの種類に対応する Shell 拡張であるプロパティハンドラーを作成するために、CoCreateInstance の代わりに CreateObject を使用します。プロパティハンドラーは、このメソッドが返すプロパティストア内の重要なプロパティの多くを提供します。 このメソッドが有用なのは、ICreateObject オブジェクトが別のプロセス内(INPROCSERVER ではなく LOCALSERVER として)で作成される場合であり、さらにこの別のプロセスが IShellItem2::GetPropertyStoreWithCreateObject を呼び出すプロセスよりも低い権限を持つ場合のみです。 |
| riid | GUID* | in | 取得するオブジェクトの IID への参照。 |
| ppv | void** | out | このメソッドが返るときに、要求された IPropertyStore インターフェイスポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
指定したプロパティキーに対応するプロパティストアオブジェクトを取得します。
| rgKeys | PROPERTYKEY* | in | PROPERTYKEY 構造体の配列へのポインター。各構造体には、プロパティストアの作成に使用される各プロパティの一意の識別子が含まれます。 |
| cKeys | DWORD | in | rgKeys が指す配列内の PROPERTYKEY 構造体の数。 |
| flags | GETPROPERTYSTOREFLAGS | in | プロパティストアオブジェクトを変更する GETPROPERTYSTOREFLAGS 定数。 |
| riid | GUID* | in | 取得するオブジェクトの IID への参照。 |
| ppv | void** | out | このメソッドが返るときに、IPropertyStore インターフェイスポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
プロパティキーへの参照を指定して、プロパティ説明リストオブジェクトを取得します。
| keyType | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| riid | GUID* | in | 目的の IID への参照。 |
| ppv | void** | out | IPropertyDescriptionList インターフェイスポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
このアイテムにキャッシュされている情報が最新の状態に更新されるようにします。
| pbc | IBindCtx* | in | バインドコンテキストオブジェクトの IBindCtx インターフェイスへのポインター。 |
戻り値
型: HRESULT
成功した場合は S_OK を返します。失敗した場合はエラー値を返します。アイテムが存在しない場合の ERROR_FILE_NOT_FOUND を含みます。
指定したプロパティキーから PROPVARIANT 構造体を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| ppropvar | PROPVARIANT* | out | PROPVARIANT 構造体へのポインターが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーのクラス識別子(CLSID)の値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| pclsid | GUID* | out | CLSID 値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーの日付と時刻の値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| pft | FILETIME* | out | 日付と時刻の値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーの Int32 値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| pi | INT* | out | Int32 値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーの文字列値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| ppsz | LPWSTR* | out | Unicode 文字列値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーの UInt32 値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| pui | DWORD* | out | UInt32 値へのポインターを受け取ります。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーの UInt64 値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| pull | ULONGLONG* | out | UInt64 値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
指定したプロパティキーのブール値を取得します。
| key | PROPERTYKEY* | in | PROPERTYKEY 構造体への参照。 |
| pf | BOOL* | out | ブール値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellItem2 "{7E9FB0D3-919F-4307-AB2E-9B1860310C93}" #usecom global IShellItem2 IID_IShellItem2 "{9AC9FBE1-E0A2-4AD6-B4EE-E212013EA917}" #comfunc global IShellItem2_GetPropertyStore 8 int,var,sptr #comfunc global IShellItem2_GetPropertyStoreWithCreateObject 9 int,sptr,var,sptr #comfunc global IShellItem2_GetPropertyStoreForKeys 10 var,int,int,var,sptr #comfunc global IShellItem2_GetPropertyDescriptionList 11 var,var,sptr #comfunc global IShellItem2_Update 12 sptr #comfunc global IShellItem2_GetProperty 13 var,var #comfunc global IShellItem2_GetCLSID 14 var,var #comfunc global IShellItem2_GetFileTime 15 var,var #comfunc global IShellItem2_GetInt32 16 var,var #comfunc global IShellItem2_GetString 17 var,var #comfunc global IShellItem2_GetUInt32 18 var,var #comfunc global IShellItem2_GetUInt64 19 var,var #comfunc global IShellItem2_GetBool 20 var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IShellItem2 "{7E9FB0D3-919F-4307-AB2E-9B1860310C93}" #usecom global IShellItem2 IID_IShellItem2 "{9AC9FBE1-E0A2-4AD6-B4EE-E212013EA917}" #comfunc global IShellItem2_GetPropertyStore 8 int,sptr,sptr #comfunc global IShellItem2_GetPropertyStoreWithCreateObject 9 int,sptr,sptr,sptr #comfunc global IShellItem2_GetPropertyStoreForKeys 10 sptr,int,int,sptr,sptr #comfunc global IShellItem2_GetPropertyDescriptionList 11 sptr,sptr,sptr #comfunc global IShellItem2_Update 12 sptr #comfunc global IShellItem2_GetProperty 13 sptr,sptr #comfunc global IShellItem2_GetCLSID 14 sptr,sptr #comfunc global IShellItem2_GetFileTime 15 sptr,sptr #comfunc global IShellItem2_GetInt32 16 sptr,sptr #comfunc global IShellItem2_GetString 17 sptr,sptr #comfunc global IShellItem2_GetUInt32 18 sptr,sptr #comfunc global IShellItem2_GetUInt64 19 sptr,sptr #comfunc global IShellItem2_GetBool 20 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。