如何在C#中获取常用桌面和开始菜单目录的路径?

时间:2010-01-18 23:44:20

标签: c# .net windows .net-2.0

我正在使用.NET 2.0。我注意到普通桌面和常用“开始”菜单文件夹似乎没有Environment.SpecialFolder成员。

我更喜欢不涉及加载shell32.dll和使用SHGetSpecialFolderPath的方式

3 个答案:

答案 0 :(得分:3)

此代码段使用注册表访问公共桌面:

Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine;
key = key.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders");
String commonDesktop = key.GetValue("Common Desktop").ToString();

来自here

答案 1 :(得分:2)

我使用P / Invoke ... 0x19对应于Common Desktop枚举,0x16对应于Common Start Menu

    public static string GetCommonDesktopFolder()
    {
        var sb = new StringBuilder(260);
        SHGetFolderPath(IntPtr.Zero, 0x19, IntPtr.Zero, 0, sb); // CSIDL_COMMON_DESKTOPDIRECTORY
        return sb.ToString();
    }

    [DllImport("shell32.dll")]
    private static extern int SHGetFolderPath(
                IntPtr hwndOwner, int nFolder, IntPtr hToken,
                uint dwFlags, StringBuilder pszPath);

}

答案 2 :(得分:0)

尝试将0x19和0x16转换为Environment.SpecialFolder以传递给Environment.GetFolderPath