转换“用户外壳文件夹”注册表值

时间:2010-05-18 07:37:47

标签: c# windows desktop

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

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

在此处找到的所有用户桌面的路径值如下:

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

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

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

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

我的问题是这个;如何使用C#程序重现此行为?更具体地说,如果我使用C#程序检索注册表值[%PUBLIC%\ Desktop],我可以轻松地将其转换为[“C:\ Users \ Public \ Desktop”]?显然我不是在寻找字符串替代品,我需要做Windows所做的事情。

4 个答案:

答案 0 :(得分:2)

使用GetFolderPath

获取路径名称

答案 1 :(得分:1)

查看Environment.SpecialFolder如此使用:

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

答案 2 :(得分:1)

虽然Mark应该使用GetFolderPath,但要复制您所询问的特定行为,您可以使用Environment.ExpandEnvironmentVariables()函数来转换字符串,如“%ALLUSERSPROFILE%\ Desktop”进入“C:\ Documents and Settings \ All Users \ Desktop”(或其他)

答案 3 :(得分:0)

谢谢各位回复。 然而,

Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

没有提供我需要的结果,因为它返回当前用户的桌面路径。

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

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