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
這個方法可以傳回其中一個值。
傳回碼 | 描述 |
---|---|
|
目標資料夾位於 ppv 中並傳回;不過,連結庫已更新,因此應該呼叫 IShellLibrary::Commit 或 IShellLibrary::Save 來保存這些變更。 |
|
目標資料夾位於 ppv 中並傳回。 |
|
這個方法可以傳回其他錯誤值。 |
備註
此方法是封鎖呼叫,只要 在傳回之前於 dwTimeout 參數中指定的時間,就可以封鎖呼叫線程。 因為它會封鎖它所呼叫的線程,所以不應該從同時處理使用者介面互動的線程呼叫。
如果無法解析位置,這個方法將不會提示使用者手動找出資料夾。
為了方便起見, SHResolveFolderPathInLibrary 可用來取代此方法。
建議您使用在 Objbase.h 中定義的 IID_PPV_ARGS 宏來封裝 riid 和 ppv 參數。 此宏會根據 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) |