Как я могу получить путь к общим папкам рабочего стола и меню «Пуск» в C #? - PullRequest
6 голосов
/ 19 января 2010

Я использую .NET 2.0. Я заметил, что, похоже, нет элемента Environment.SpecialFolder для общих папок рабочего стола и общих папок "Пуск".

Я бы предпочел способ, который не включает загрузку shell32.dll и использование SHGetSpecialFolderPath

Ответы [ 3 ]

3 голосов
/ 19 января 2010

Этот фрагмент кода использует реестр для доступа к общему рабочему столу:

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();

С здесь

2 голосов
/ 19 января 2010

Я использую 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);

}
0 голосов
/ 19 января 2010

Попробуйте привести 0x19 и 0x16 к Environment.SpecialFolder для передачи в Environment.GetFolderPath

...