似乎有一些虚拟文件夹具有与其关联的 GUID(控制面板、桌面)-

::{00021400-0000-0000-c000-000000000046}//桌面

这些火焰是在哪里定义的?它们什么时候使用?

我想要的是一种让字符串代表虚拟文件夹的方法,没有任何歧义。

例如,如果我要为桌面创建一个 PIDL,显示名称将返回为“C:\Users\Steve\Desktop”。

嗯,目前确实如此 - 但它并不是真正正确的文件夹。我可以在资源管理器中导航到该文件夹​​,它包含我桌面上的一部分文件,而不是整个桌面。

我想要的是一种将该位置编码为字符串的方法,该字符串将始终导航到虚拟桌面文件夹(具有其所有内容的文件夹,而不仅仅是一些内容)。

有谁知道此类 GUID 的明确列表?或者我如何将给定的 PIDL 转换为一个?

我尝试了 SHGetDisplayName(pidl, SHGDN_*) - 桌面 pidl 的每个版本都给我一个简短的“桌面”或“C:\Users\Steve\Desktop”。 (显然,我是在“史蒂夫”帐户下登录的)。

想法/评论/指针?

编辑:所以似乎我可以使用下面给出的答案来获得已知文件夹 GUId 的列表。但是有人知道如何以编程方式从 PIDL -> 已知文件夹 GUID 转换吗?我假设我可以 ParseDisplayName("::{guid}") 来获得 PIDL,但是有没有办法获得 GUID?

EDIT2:我仍然找不到以编程方式获取 GUID 的方法。但是,出于我的目的,我正在记录最初用于创建对象的 CSIDL_xxx,然后将其写出并在以后恢复它,然后通过 CSIDL 创建一个 PIDL,该 PIDL 保留了其正确的身份(即它没有'不会降级为“C:\Users\\Desktop”,而是生成一个真正指向虚拟桌面的 PIDL。

我的诀窍是始终使用 CSIDL->PIDL,永远不要使用中间的字符串。 CSIDL->PIDL->string->PIDL = 退化为非虚拟路径。

感谢大家的帮助 - 我会继续寻找是否有人发现更多关于该主题的信息并发布,我会感兴趣! ;)

最佳答案

如果我理解正确,您正在寻找 CSIDL s(Vista 之前,包括 Shlobj.h)或 KNOWNFOLDERID(>= Vista,Knownfolders.h)。

关于c++ - 有哪些众所周知的虚拟文件夹 GUID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2112188/

10-13 05:49