IShellLibrary::ResolveFolder メソッド (shobjidl_core.h)

フォルダーが移動または名前変更された場合でも、ライブラリ フォルダーのターゲットの場所を解決します。

構文

HRESULT ResolveFolder(
  [in]  IShellItem *psiFolderToResolve,
  [in]  DWORD      dwTimeout,
  [in]  REFIID     riid,
  [out] void       **ppv
);

パラメーター

[in] psiFolderToResolve

種類: IShellItem*

検索するライブラリ フォルダーを表す IShellItem オブジェクト。

[in] dwTimeout

型: DWORD

メソッドが返す前にフォルダーの検索を試行する最大時間 (ミリ秒単位)。 指定した時間が経過する前にフォルダーが見つからない場合は、エラーが返されます。

[in] riid

型: REFIID

解決されたターゲットの場所を表す ppv で取得するインターフェイスの IID への参照。 通常、この値はIID_IShellItemですが、CShellItem によって実装されるその他のインターフェイスのIID_IShellItem2または IID を使用することもできます。

[out] ppv

型: void**

riid で要求されたインターフェイスへのポインター。

戻り値

型: HRESULT

このメソッドは、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
ターゲット フォルダーが見つから、 ppv で返されました。ただし、ライブラリは更新されているため、これらの変更を保持するために IShellLibrary::Commit または IShellLibrary::Save を呼び出す必要があります。
S_FALSE
ターゲット フォルダーが見つから、 ppv で返されました。
E_
このメソッドは、他のエラー値を返すことができます。

注釈

このメソッドはブロック呼び出しであり、返す前に dwTimeout パラメーターで指定された時間を超える限り、呼び出し元のスレッドをブロックできます。 呼び出し元のスレッドをブロックするため、ユーザー インターフェイスの相互作用も処理するスレッドから呼び出さないでください。

このメソッドは、場所を解決できない場合、ユーザーにフォルダーを手動で検索するように求めるメッセージを表示しません。

便宜上、このメソッドの代わりに SHResolveFolderPathInLibrary を使用できます。

riid パラメーターと ppv パラメーターをパッケージ化するには、Objbase.h で定義されているIID_PPV_ARGS マクロを使用することをお勧めします。 このマクロは 、ppv の値によって指されるインターフェイスに基づいて正しい IID を提供するため、コーディング エラーが発生する可能性がなくなります。

次のコード例は、このメソッドをラップするヘルパー関数 SHResolveFolderPathInLibrary を示しています。

//
// from shobjidl.h
//
__inline HRESULT SHResolveFolderPathInLibrary(
    __in IShellLibrary *plib,
    __in PCWSTR pszFolderPath,
    __in DWORD dwTimeout,
    __deref_out PWSTR *ppszResolvedPath
)
{
    *ppszResolvedPath = NULL;
    PIDLIST_ABSOLUTE pidlFolder = 
      SHSimpleIDListFromPath(pszFolderPath);
    HRESULT hr = pidlFolder ? S_OK : E_INVALIDARG;
    if (SUCCEEDED(hr))
    {
        IShellItem *psiFolder;
        hr = SHCreateItemFromIDList(
          pidlFolder, 
          IID_PPV_ARGS(&psiFolder));

        if (SUCCEEDED(hr))
        {
            IShellItem *psiResolved;
            hr = plib->ResolveFolder(
              psiFolder, 
              dwTimeout, 
              IID_PPV_ARGS(&psiResolved));

            if (SUCCEEDED(hr))
            {
                hr = psiResolved->GetDisplayName(
                  SIGDN_DESKTOPABSOLUTEPARSING, 
                  ppszResolvedPath);
                psiResolved->Release();
            }
            psiFolder->Release();
        }
        CoTaskMemFree(pidlFolder);
    }
    return hr;
}

要件

要件
サポートされている最小のクライアント Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shobjidl_core.h (Shobjidl.h を含む)

こちらもご覧ください

IShellLibrary

IShellLibrary::Commit

IShellLibrary::Save

SHResolveFolderPathInLibrary

Windows ライブラリ