c++ - 众所周知的虚拟文件夹 GUID 是什么?

标签 c++ com shell windows-shell

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

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

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

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

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

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

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

有人知道此类 GUID 的最终列表吗?或者我如何将给定的 PIDL 转换为一个?

我尝试了 SHGetDisplayName(pidl, SHGDN_*) - 桌面 pidl 的每个版本都给了我一个简短的“桌面”或“C:\Users\Steve\Desktop”。 (很明显,我是使用“steve”帐户登录的)。

想法/评论/指针?

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

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

对我来说,诀窍是始终使用 CSIDL->PIDL,从不使用介于两者之间的字符串。 CSIDL->PIDL->string->PIDL = 退化为非虚拟路径。

感谢大家的帮助 - 如果有人找到更多关于该主题的内容并发布它,我会继续寻找,我会很感兴趣! ;)

最佳答案

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

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

相关文章:

python - 在 Python 中捕获 netcat shell 命令输出

windows - 批处理文件中的 for 循环读取文件路径的文件

c++ - 使用指向文件的指针存储数据结构?

c++ - pthread_join() 在 iOS 上失败

c++ - 如何捕捉窗口大小调整?

C++ 链表奇怪的输出

c# - Com 互操作结构定义与内存布局不匹配

delphi - 导入COM组件: Difference c# vs. Delphi XE

c++ - 我应该在使用 CreateTexture2D 后在 ID3D10Device 接口(interface)上调用 Release 吗?为什么?

shell - 如何在fish shell中设置环境变量