检测 IShellItem 引用库的正确方法是什么?

Dav*_*nan 0 windows winapi

我正在使用通用文件对话框FOS_PICKFOLDERS让用户选择一个位置来保存文件。如果用户选择了一个库,例如,Library\Documents那么我当前的代码在我调用IShellItem::GetDisplayName以提取文件系统名称的地方失败。如果该项目是一个文件,那么这将成功并且将使用库的默认保存位置。

我想要做的是检测shell项是一个库,然后获取一个IShellLibrary接口,然后查询它以找到默认的保存位置。然后我会把我的文件保存在那里。

检测IShellItem指向图书馆的正确方法是什么?

Rem*_*eau 5

用于从 anSHLoadLibraryFromItem()获取IShellLibraryan IShellItem,例如:

IShellItem *pItem, *pSave;
IShellLibrary *pLibrary;
...
if (SUCCEEDED(SHLoadLibraryFromItem(pItem, STGM_READWRITE, IID_IShellLibrary, (void**)&pLibrary)))
{
    pLibrary->GetDefaultSaveFolder(DSFT_DETECT, IID_IShellItem, (void**)&pSave);
    pLibrary->Release();
}
else
{
    pSave = pItem;
    pSave->AddRef();
}
...
pSave->GetDisplayName(...);
pSave->Release();
Run Code Online (Sandbox Code Playgroud)