似乎有一些虚拟文件夹具有与之关联的 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,它保留其正确的身份(即它不不会降级为“C:\Users\\Desktop”,而是生成一个真正指向虚拟桌面的 PIDL。
对我来说,诀窍是始终使用 CSIDL->PIDL,从不使用介于两者之间的字符串。CSIDL->PIDL->string->PIDL = 退化为非虚拟路径。
感谢大家的帮助-如果有人找到有关该主题的更多信息并将其发布,我将继续寻找,我会很感兴趣!;)