如何从Windows库的GUID中获取PIDL?
How to get a PIDL from a Windows library's GUID?
如何从库的GUID获得PIDL ?
例如,如果我有文档库的GUID ("{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}"),我如何将其转换为库的ID列表?
我认为SHParseDisplayName
会做这项工作,但它返回"文件未找到"。
请记住,我需要的是库的PIDL,而不是它的默认文件夹。
这是直接的c++,而不是。net。
TIA
编辑:这是有效的代码,来自下面的响应(没有错误检查)。guid
是一个以'shell:::'为前缀的GUID字符串,例如'shell:::{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}'。
IShellFolder* pDesktop;
LPITEMIDLIST pidl;
SHGetDesktopFolder(&pDesktop);
pDesktop->ParseDisplayName(nullptr, nullptr, guid, nullptr, &pidl, 0);
编辑2:更容易:SHParseDisplayName
工作,如果'shell:::'是前置:
SHParseDisplayName(guid, nullptr, &pidl, 0, nullptr);
根据IShellFolder::ParseDisplayName
的文档,如果您正在使用桌面文件夹,您可以简单地通过::{GUID}
形式的文件名。
编辑:文档似乎不完整,根据这个答案,您需要将shell:
添加到字符串的开头。
p->ParseDisplayName(m_hWnd, NULL, _T("shell:::{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}"), NULL, &pidl, NULL);
您想要的函数SHGetKnownFolderIDList
- 给定一个KnownFolderID guid(例如 folderid_documentlibrary -
{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}
) - 返回该KNOWNFOLDER的绝对文件夹
PIDLIST_ABSOLUTE pidl;
HRESULT hr = SHGetKnownFolderItem(FOLDERID_DocumentsLibrary, 0, NULL, out pidl);
奖金喋喋不休
有三个shell函数用于处理KNOWNFOLDERs
- SHGetKnownFolderPath:获取已知文件夹的完整路径(例如:
C:UsersChrisDocuments
) - SHGetKnownFolderIDList:获取已知文件夹的绝对pidl
- SHGetKnownFolderItem:获取已知文件夹 的IShellItem
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 如何从Windows库的GUID中获取PIDL?