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

介面 IID 的參考,以在 ppv 中取得,代表已解析的目標位置。 此值通常是IID_IShellItem,但也可以IID_IShellItem2或 CShellItem 所實作之任何其他介面的 IID。

[out] ppv

類型: void**

riid 中要求的介面指標。

傳回值

類型: HRESULT

這個方法可以傳回其中一個值。

傳回碼 描述
S_OK
目標資料夾位於 ppv 中並傳回;不過,連結庫已更新,因此應該呼叫 IShellLibrary::CommitIShellLibrary::Save 來保存這些變更。
S_FALSE
目標資料夾位於 ppv 中並傳回。
E_
這個方法可以傳回其他錯誤值。

備註

此方法是封鎖呼叫,只要 在傳回之前於 dwTimeout 參數中指定的時間,就可以封鎖呼叫線程。 因為它會封鎖它所呼叫的線程,所以不應該從同時處理使用者介面互動的線程呼叫。

如果無法解析位置,這個方法將不會提示使用者手動找出資料夾。

為了方便起見, SHResolveFolderPathInLibrary 可用來取代此方法。

建議您使用在 Objbase.h 中定義的 IID_PPV_ARGS 宏來封裝 riidppv 參數。 此宏會根據 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 媒體櫃