Получите общий настольный путь в.NET

Во-первых, вот видео разговор об изменениях, которые пройдет Python. Во-вторых, изменения бесполезны. В-третьих, я для одной желанной эволюции и полагаю, что это необходимо.

8
задан mirabilos 3 January 2015 в 15:57
поделиться

5 ответов

Я думаю, вам нужно использовать API SHGetSpecialFolderPath , поскольку для "CommonDesktopDirectory" нет значения перечисления. Вы не можете явно использовать значение CSIDL_COMMON_DESKTOPDIRECTORY и привести его к Environment.SpecialFolder , потому что метод GetFolderPath проверяет, что значение определено в перечислении. Вот код метода GetFolderPath (из Reflector):

public static string GetFolderPath(SpecialFolder folder)
{
    if (!Enum.IsDefined(typeof(SpecialFolder), folder))
    {
        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, GetResourceString("Arg_EnumIllegalVal"), new object[] { (int) folder }));
    }
    StringBuilder lpszPath = new StringBuilder(260);
    Win32Native.SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, lpszPath);
    string path = lpszPath.ToString();
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
    return path;
}

Таким образом, вы можете легко скопировать и адаптировать ту часть, которая вам нужна ...

2
ответ дан 6 December 2019 в 01:40
поделиться

Для пояснения - Под обычным рабочим столом вы подразумеваете C: \ Documents and Settings \ All Users \ Desktop ?

Если да, то это ужасный взлом -

Dim c As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim comDesktop As String = c.Substring(0, c.LastIndexOf("\")) + "\Desktop"
0
ответ дан 6 December 2019 в 01:40
поделиться

Вы можете использовать Windows Script Host - WshShell.SpecialFolders

http://msdn.microsoft.com/en -us / library / 0ea7b5xe (VS.85) .aspx

0
ответ дан 6 December 2019 в 01:40
поделиться

Сначала добавьте ссылку на «Объектную модель хоста сценариев Windows». Вы найдете это на вкладке COM диалогового окна «Добавить ссылки».

using IWshRuntimeLibrary;

object commonUserDesktop = "AllUsersDesktop";
WshShell shell = new WshShellClass();
string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();
0
ответ дан 6 December 2019 в 01:40
поделиться

Другой способ (да, он тоже уродливый и будет работать, вероятно, только в Windows XP, а не в Vista) - прочитать значение из реестра

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders, Common Desktop

0
ответ дан 6 December 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: