IKnownFolder
COM公式ドキュメント
アプリケーションが既知フォルダーのカテゴリ、種類、GUID、アイテム識別子リスト (PIDL) 値へのポインター、リダイレクト機能、および定義に関する情報を取得できるようにするメソッドを公開します。
解説(Remarks)
IKnownFolder オブジェクトは、IKnownFolderManager インターフェイスの IKnownFolderManager::GetFolder や IKnownFolderManager::FindFolderFromIDList などのいくつかのメソッドを通じて取得できます。
サードパーティは IKnownFolder を実装しません。提供されている実装を使用してください。
メソッド 9
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
選択されたフォルダーの ID を取得します。
| pkfid | GUID* | out | このメソッドが返るとき、既知フォルダーの KNOWNFOLDERID 値を返します。KNOWNFOLDERID 値は GUID であることに注意してください。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
選択されたフォルダーのカテゴリ (仮想、固定、共通、またはユーザーごと) を取得します。
| pCategory | KF_CATEGORY* | out | このメソッドが返るとき、選択されたフォルダーの KF_CATEGORY へのポインターを格納します。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
Shell 名前空間内の既知フォルダーの場所を、Shell アイテム (IShellItem または派生インターフェイス) の形式で取得します。
| dwFlags | DWORD | in | 特別な取得オプションを指定するフラグ。この値は 0 にすることができます。それ以外の場合は、1 つ以上の KNOWN_FOLDER_FLAG 値です。 |
| riid | GUID* | in | 要求するインターフェイスの IID への参照。 |
| ppv | void** | out | このメソッドが返るとき、riid で要求されたインターフェイスポインターを格納します。これは通常、IShellItem または IShellItem2 です。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
既知フォルダーのパスを文字列として取得します。
| dwFlags | DWORD | in | 特別な取得オプションを指定するフラグ。この値は 0 にすることができます。それ以外の場合は、1 つ以上の KNOWN_FOLDER_FLAG 値です。 |
| ppszPath | LPWSTR* | out | このメソッドが返るとき、パスを含む null 終端バッファーへのポインターのアドレスを格納します。呼び出し側アプリケーションは、このリソースが不要になったときに CoTaskMemFree を呼び出して解放する責任があります。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
SHGetKnownFolderPath と同等です。
既知フォルダーに新しいパスを割り当てます。
| dwFlags | DWORD | in | ゼロ、または次の値のいずれか: KF_FLAG_DONT_UNEXPAND環境文字列を含まない完全なパスを設定します。このフラグが設定されていない場合、pszPath のパスの一部が |
| pszPath | LPWSTR | in | フォルダーの新しいパスへのポインター。これは長さ MAX_PATH の null 終端 Unicode 文字列です。このパスは長さ 0 にすることはできません。この値が NULL の場合、IKnownFolder::SetPath はパスを既定値に設定します。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、KF_CATEGORY_FIXED または KF_CATEGORY_VIRTUAL 型のフォルダーに対しては呼び出すことができません。
KF_CATEGORY_COMMON 型のフォルダーに対してこのメソッドを呼び出すには、呼び出し側アプリケーションが昇格された特権で実行されている必要があります。
このメソッドは SHSetKnownFolderPath と同等です。
Shell 名前空間フォルダーの場所を IDList (ITEMIDLIST) 形式で取得します。
| dwFlags | DWORD | in | 特別な取得オプションを指定するフラグ。この値は 0 にすることができます。それ以外の場合は、1 つ以上の KNOWN_FOLDER_FLAG 値です。 |
| ppidl | ITEMIDLIST** | out | このメソッドが返るとき、絶対 PIDL のアドレスを格納します。このパラメーターは初期化されずに渡されます。呼び出し側アプリケーションは、このリソースが不要になったときに解放する責任があります。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
SHGetKnownFolderIDList と同等です。
フォルダーの種類を取得します。
| pftid | GUID* | out | これが返るとき、既知フォルダーの種類を識別する FOLDERTYPEID (GUID) へのポインターを格納します。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
既知フォルダーのパスを新しい値に設定できるかどうか、またはそのリダイレクトに課される特定の制限や禁止事項を示す値を取得します。
| pCapabilities | DWORD* | out | このメソッドが返るとき、このフォルダーのリダイレクト機能を示す KF_REDIRECTION_CAPABILITIES 値へのポインターを格納します。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
既知フォルダーの定義要素を含む構造体を取得します。これには、フォルダーのカテゴリ、名前、パス、説明、ツールチップ、アイコン、およびその他のプロパティが含まれます。
| pKFD | KNOWNFOLDER_DEFINITION* | out | このメソッドが返るとき、KNOWNFOLDER_DEFINITION 構造体へのポインターを格納します。不要になったときは、呼び出し側アプリケーションが FreeKnownFolderDefinitionFields を呼び出してこのリソースを解放する責任があります。 |
戻り値
型: HRESULT
このメソッドが成功すると、S_OK を返します。それ以外の場合は、HRESULT エラーコードを返します。
解説(Remarks)
サードパーティアプリケーションが独自の既知フォルダーを作成する場合、KNOWNFOLDER_DEFINITION 構造体でそれを定義し、システムに登録することで作成します。登録された既知フォルダーの定義情報 (システム提供またはアプリケーション作成) は、このメソッドを通じて取得できます。
このメソッドを呼び出すには、呼び出し側が少なくとも User 特権を持っている必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IKnownFolder "{3AA7AF7E-9B36-420C-A8E3-F77D4674A488}" #usecom global IKnownFolder IID_IKnownFolder "{}" #comfunc global IKnownFolder_GetId 3 var #comfunc global IKnownFolder_GetCategory 4 var #comfunc global IKnownFolder_GetShellItem 5 int,var,sptr #comfunc global IKnownFolder_GetPath 6 int,var #comfunc global IKnownFolder_SetPath 7 int,wstr #comfunc global IKnownFolder_GetIDList 8 int,var #comfunc global IKnownFolder_GetFolderType 9 var #comfunc global IKnownFolder_GetRedirectionCapabilities 10 var #comfunc global IKnownFolder_GetFolderDefinition 11 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IKnownFolder "{3AA7AF7E-9B36-420C-A8E3-F77D4674A488}" #usecom global IKnownFolder IID_IKnownFolder "{}" #comfunc global IKnownFolder_GetId 3 sptr #comfunc global IKnownFolder_GetCategory 4 sptr #comfunc global IKnownFolder_GetShellItem 5 int,sptr,sptr #comfunc global IKnownFolder_GetPath 6 int,sptr #comfunc global IKnownFolder_SetPath 7 int,wstr #comfunc global IKnownFolder_GetIDList 8 int,sptr #comfunc global IKnownFolder_GetFolderType 9 sptr #comfunc global IKnownFolder_GetRedirectionCapabilities 10 sptr #comfunc global IKnownFolder_GetFolderDefinition 11 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。