ICategoryProvider
COM公式ドキュメント
IShellFolder に登録されたカテゴライザーの一覧を公開します。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
列をカテゴリとして使用できるかどうかを判定します。
| pscid | PROPERTYKEY* | in | 列を識別する SHCOLUMNID 構造体へのポインターです。S_OK が返された場合にのみ有効です。この構造体に含まれる GUID は、その後 ICategoryProvider::CreateCategory に渡されます。 |
戻り値
解説(Remarks)
システムフォルダービューオブジェクトをカテゴリビュー(Show in Groups)で使用する場合、このメソッドが S_OK を返す列のタイトルが、Arrange Icons By サブメニューの上部に表示されます。
フォルダーが既定のグループ化を上書きできるようにします。
| pguid | GUID* | out | 使用されません。 |
| pscid | PROPERTYKEY* | out | このメソッドが返るときに、SHCOLUMNID 構造体へのポインターが格納されます。 |
戻り値
解説(Remarks)
ICategoryProvider::GetDefaultCategory は、既定のカテゴライザーが使用する SHCOLUMNID 構造体を返します。既定のグループがサポートされていない場合、このメソッドは S_FALSE を返します。
ICategoryProvider::GetDefaultCategory は、フォルダーが最初に開かれたときにのみ呼び出されます。それ以降は、ユーザーのグループ化の選択が、ビューの状態を格納するプロパティバッグにキャッシュされます。フォルダーが最初に開かれた後に ICategoryProvider::GetDefaultCategory の呼び出しを強制するには、Shell および ShellNoRoam レジストリキーを削除する必要があります。これらは次の場所にあります。
HKEY_CURRENT_USER
Software
Microsoft
Windows
Shell
ShellNoRoam指定されたシェル列に使用するカテゴライザーを表す GUID を取得します。
| pscid | PROPERTYKEY* | in | SHCOLUMNID 構造体へのポインターです。 |
| pguid | GUID* | out | このメソッドが返るときに、pscid が指す SHCOLUMNID に使用するカテゴライザーを表す GUID へのポインターが格納されます。 |
戻り値
カテゴリを表す GUID の一覧の列挙子を取得します。
| penum | IEnumGUID** | out | このメソッドが返るときに、カテゴリを表す GUID の一覧を指定する IEnumGUID インターフェースへのポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
システムフォルダービューオブジェクトの場合、ICategoryProvider::EnumCategories は、列に関連付けられていない追加のカテゴリを取得するために使用されます。カテゴリ GUID の一覧が penum を通じて返されると、UI は各カテゴリの名前の取得を試みます。その名前は、カテゴリの選択肢として表示されます。Windows XP の場合、その選択肢はフォルダーの Arrange Icons By メニューに表示されます。
指定されたカテゴリの名前を取得します。
| pguid | GUID* | in | GUID へのポインターです。 |
| pszName | LPWSTR | out | このメソッドが返るときに、カテゴリの名前を受け取る文字列へのポインターが格納されます。 |
| cch | DWORD | in | 文字列内の文字数を受け取る整数です。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
カテゴリオブジェクトを作成します。
| pguid | GUID* | in | カテゴリオブジェクトの GUID へのポインターです。 |
| riid | GUID* | in | 返すオブジェクトの識別子です。現在、システムフォルダービューオブジェクトでサポートされている唯一の値は IID_ICategorizer です。 |
| ppv | void** | 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_ICategoryProvider "{9AF64809-5864-4C26-A720-C1F78C086EE3}" #usecom global ICategoryProvider IID_ICategoryProvider "{}" #comfunc global ICategoryProvider_CanCategorizeOnSCID 3 var #comfunc global ICategoryProvider_GetDefaultCategory 4 var,var #comfunc global ICategoryProvider_GetCategoryForSCID 5 var,var #comfunc global ICategoryProvider_EnumCategories 6 sptr #comfunc global ICategoryProvider_GetCategoryName 7 var,var,int #comfunc global ICategoryProvider_CreateCategory 8 var,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICategoryProvider "{9AF64809-5864-4C26-A720-C1F78C086EE3}" #usecom global ICategoryProvider IID_ICategoryProvider "{}" #comfunc global ICategoryProvider_CanCategorizeOnSCID 3 sptr #comfunc global ICategoryProvider_GetDefaultCategory 4 sptr,sptr #comfunc global ICategoryProvider_GetCategoryForSCID 5 sptr,sptr #comfunc global ICategoryProvider_EnumCategories 6 sptr #comfunc global ICategoryProvider_GetCategoryName 7 sptr,sptr,int #comfunc global ICategoryProvider_CreateCategory 8 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。