IShellFolder2
COM公式ドキュメント
IShellFolder の機能を拡張します。そのメソッドは、Shell フォルダーの内容に関するさまざまな情報を提供します。
解説(Remarks)
このインターフェイスは、継承元である IShellFolder インターフェイスのメソッドも提供します。
実装するタイミング
名前空間拡張が IShellFolder を超えるサービスをクライアントに提供する場合は、IShellFolder2 を実装してください。使用するタイミング
Shell フォルダーに含まれる項目の詳細情報が必要な場合は、IShellFolder2 を呼び出してください。このインターフェイスは IShellDetails に取って代わるものです。メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フォルダーの既定の検索オブジェクトのグローバル一意識別子 (GUID) を返します。
| pguid | GUID* | out | 既定の検索オブジェクトの GUID。 |
戻り値
種類: HRESULT
成功した場合は S_OK を、それ以外の場合は COM エラー値を返します。
クライアントが利用可能な検索オブジェクトを列挙できるようにするインターフェイスへのポインターを要求します。
| ppenum | IEnumExtraSearch** | out | 列挙子オブジェクトの IEnumExtraSearch インターフェイスへのポインターのアドレス。 |
戻り値
種類: HRESULT
成功した場合は S_OK を、それ以外の場合は COM エラー値を返します。
既定の並べ替え列および表示列を取得します。
| dwRes | DWORD | in | 予約済み。0 に設定します。 |
| pSort | DWORD* | out | 既定の並べ替え列のインデックスを受け取る値へのポインター。 |
| pDisplay | DWORD* | out | 既定の表示列のインデックスを受け取る値へのポインター。 |
戻り値
種類: HRESULT
成功した場合は S_OK を、それ以外の場合は COM エラー値を返します。
解説(Remarks)
利用者向けの注意
このメソッドが返す両方の列インデックスは、このフォルダーのフォルダービューを表示するアプリケーションによる使用を想定しています。 <i>pSort</i> で指定される列は、フォルダー内の項目の並べ替えに使用すべき列です。任意の 2 つの項目の並べ替え順序を判定するには、それらの PIDL を <a href="/windows/desktop/api/shobjidl_core/nf-shobjidl_core-ishellfolder-compareids">CompareIDs</a> に渡します。列を指定するには、<b>CompareIDs</b> の
<i>lParam</i> パラメーターを
<i>pSort</i> が指す値に設定します。
ビューが項目を表す文字列を 1 つだけ表示する場合、その文字列は pDisplay で指定される列から取得すべきです。列インデックスと項目の PIDL を IShellFolder2::GetDetailsOf に渡して文字列を取得します。
実装者向けの注意
このメソッドは、名前空間拡張のフォルダーオブジェクト実装の一部です。通常はフォルダービューオブジェクトが呼び出し、Microsoft Windows Explorer の詳細ビューでフォルダー内の項目を並べ替えるためにどの列を使用すべきかをフォルダーオブジェクトに問い合わせます。たとえば、トランザクションログを表すフォルダーオブジェクトは、 pSort をトランザクション時刻を表示する列に設定するとよいでしょう。これにより、項目は名前順ではなく、トランザクションが発生した時刻順に並べ替えられます。クライアントによっては、ツリービューに表示すべき名前を含む列のインデックスを要求するためにこのメソッドを呼び出す場合があります。 pDisplay を適切な列インデックスに設定してください。クライアントは IShellFolder2::GetDetailsOf を呼び出して表示名を取得します。
指定した列の既定の状態を取得します。
| iColumn | DWORD | in | 列番号を指定する整数。 |
| pcsFlags | SHCOLSTATE* | out | 既定の列の状態を示すフラグを含む値へのポインター。このパラメーターには、次のフラグの組み合わせを含めることができます。 SHCOLSTATE_TYPE_STR文字列。 SHCOLSTATE_TYPE_INT整数。 SHCOLSTATE_TYPE_DATE日付。 SHCOLSTATE_ONBYDEFAULTWindows Explorer の詳細ビューに既定で表示されるべきです。 SHCOLSTATE_SLOWこの情報の抽出には時間がかかる場合があるため、フォルダービューが列情報をバックグラウンドスレッドで非同期に抽出することを推奨します。 SHCOLSTATE_EXTENDEDフォルダーオブジェクトではなくハンドラーによって提供されます。 SHCOLSTATE_SECONDARYUIショートカットメニューには表示されませんが、[その他] ダイアログボックスに一覧表示されます。 SHCOLSTATE_HIDDENユーザーインターフェイスに表示されません。 SHCOLSTATE_PREFER_VARCMP並べ替え順序の取得に CompareIDs ではなく既定の並べ替えを使用します。 |
戻り値
種類: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
プロパティセット識別子 (FMTID) とプロパティ識別子 (PID) で識別される、Shell フォルダー内の項目の詳細情報を取得します。
| pidl | ITEMIDLIST* | in | 親フォルダーからの相対的な、項目の PIDL。このメソッドは単一レベルの PIDL のみを受け付けます。この構造体は、ちょうど 1 つの SHITEMID 構造体とそれに続く終端のゼロを含む必要があります。この値を NULL にすることはできません。 |
| pscid | PROPERTYKEY* | in | 列を識別する SHCOLUMNID 構造体へのポインター。 |
| pv | VARIANT* | out | 要求された情報を含む VARIANT へのポインター。値は完全に型付けされています。プロパティシステムのプロパティに対して返される値は、そのプロパティ定義の typeInfo における legacyType 属性で指定された型に準拠する必要があります。 |
戻り値
種類: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
この関数は IShellFolder2::GetDetailsOf のより堅牢なバージョンです。Shell フォルダーの Windows Explorer 詳細ビューに表示される情報へのアクセスを提供します。主な違いは、GetDetailsEx では、まず列インデックスを判定する必要なく、FMTID と PID 構造体で列を識別できる点です。
列インデックスで識別される、Shell フォルダー内の項目の詳細情報を取得します。
| pidl | ITEMIDLIST* | in | 情報を要求する対象の項目の PIDL。このメソッドは単一レベルの PIDL のみを受け付けます。この構造体は、ちょうど 1 つの SHITEMID 構造体とそれに続く終端のゼロを含む必要があります。このパラメーターが NULL に設定されている場合は、iColumn で指定された情報フィールドのタイトルが返されます。 |
| iColumn | DWORD | in | 目的の情報フィールドの 0 から始まるインデックス。Windows Explorer の詳細ビューに表示される情報の列番号と同一です。 |
| psd | SHELLDETAILS* | out | 情報を格納する SHELLDETAILS 構造体へのポインター。 |
戻り値
種類: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
IShellFolder2::GetDetailsOf メソッドは GetDetailsOf と同一です。列インデックスを知る必要がない、より堅牢な項目情報の取得方法として、IShellFolder2::GetDetailsEx を使用してください。
IShellFolder2::GetDetailsOf メソッドは、Shell フォルダーの Windows Explorer 詳細ビューに表示される情報へのアクセスを提供します。詳細ビューに表示される列番号、見出し、情報は、IShellFolder2::GetDetailsOf のものと同一です。利用可能な情報フィールドとその列番号は、フォルダーによって異なる点に注意してください。pidl を NULL に設定してこのメソッドを呼び出し、各列インデックスに関連付けられたタイトルを調べることで、利用可能なフィールドを列挙できます。これらのタイトルはローカライズされることがあり、すべてのロケールで同一とは限らない点に留意してください。
ファイルシステムフォルダーには、大きな標準的な情報フィールドのセットがあります。最初の 4 つのフィールドは、すべてのファイルシステムフォルダーで標準です。
| 列インデックス | 列タイトル |
|---|---|
| 0 | 名前 |
| 1 | サイズ |
| 2 | 種類 |
| 3 | 更新日時 |
ファイルシステムフォルダーは、多数の追加フィールドをサポートできます。ただし、それは必須ではなく、これらのフィールドに割り当てられる列インデックスは異なる場合があります。
各仮想フォルダーには、それぞれ独自の情報フィールドのセットがあります。通常、項目の表示名は列 0 にありますが、残りのフィールドの順序と内容は、その特定のフォルダーオブジェクトの実装に依存します。
列を適切なプロパティセット ID (FMTID) およびプロパティ ID (PID) に変換します。
| iColumn | DWORD | in | 列 ID。 |
| pscid | PROPERTYKEY* | out | FMTID と PID を含む SHCOLUMNID 構造体へのポインター。 |
戻り値
種類: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IShellFolder2 "{93F2F68C-1D1B-11D3-A30E-00C04F79ABD1}" #usecom global IShellFolder2 IID_IShellFolder2 "{}" #comfunc global IShellFolder2_GetDefaultSearchGUID 13 var #comfunc global IShellFolder2_EnumSearches 14 sptr #comfunc global IShellFolder2_GetDefaultColumn 15 int,var,var #comfunc global IShellFolder2_GetDefaultColumnState 16 int,var #comfunc global IShellFolder2_GetDetailsEx 17 var,var,var #comfunc global IShellFolder2_GetDetailsOf 18 var,int,var #comfunc global IShellFolder2_MapColumnToSCID 19 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IShellFolder2 "{93F2F68C-1D1B-11D3-A30E-00C04F79ABD1}" #usecom global IShellFolder2 IID_IShellFolder2 "{}" #comfunc global IShellFolder2_GetDefaultSearchGUID 13 sptr #comfunc global IShellFolder2_EnumSearches 14 sptr #comfunc global IShellFolder2_GetDefaultColumn 15 int,sptr,sptr #comfunc global IShellFolder2_GetDefaultColumnState 16 int,sptr #comfunc global IShellFolder2_GetDetailsEx 17 sptr,sptr,sptr #comfunc global IShellFolder2_GetDetailsOf 18 sptr,int,sptr #comfunc global IShellFolder2_MapColumnToSCID 19 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。