转换“用户shell文件夹”registry值

以下registry项包含许多系统默认文件夹位置。

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ User Shell Folders

所有用户桌面的path的值在那里find,如下所示:

XP or earlier : [%ALLUSERSPROFILE%\Desktop] Vista or later: [%PUBLIC%\Desktop] 

而所有用户桌面的实际path分别如下:

 XP or earlier : "C:\Documents and Settings\All Users\Desktop" Vista or later: "C:\Users\Public\Desktop" 

现在,如果您在Windows资源pipe理器中使用复制并粘贴上述registry值,然后按Enter键,则会将您带到实际的文件夹中。 例如,如果将[%PUBLIC%\ Desktop]粘贴到Vista中的Windows资源pipe理器中,它会将您带到[“C:\ Users \ Public \ Desktop”]。

我的问题是这个; 如何从C#程序中重现此行为? 更具体地说,如果我从C#程序中获取registry值[%PUBLIC%\ Desktop],我可以轻松地做到这一点,我该如何将它转换为[“C:\ Users \ Public \ Desktop”]? 显然,我不是在寻找一个stringreplace,我需要做的是Windows的工作。

通过使用GetFolderPath获取parh名称

看看这样使用Environment.SpecialFolder

 string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 

虽然你应该像Mark所说的那样使用GetFolderPath ,为了复制你所要求的特定行为,你可以使用Environment.ExpandEnvironmentVariables()函数将一个像“%ALLUSERSPROFILE%\ Desktop”这样的字符串变成“C:\ Documents”设置\所有用户\桌面“(或其他)

感谢球员的答复。 然而,

 Environment.GetFolderPath(Environment.SpecialFolder.Desktop); 

不会给我我需要的结果,因为它返回当前用户的桌面路径。

最后我发现我可以使用什么codeka建议。 另外,当检索注册表项时,它会自动调用该函数。

顺便说一句,我听说在.NET 4.0中,他们已经添加了一个枚举到Environment.SpecialFolder,以便可以检索Common Desktop。