Я думаю, что вы должны использовать API SHGetSpecialFolderPath
, так как для "CommonDesktopDirectory" нет значения enum. Вы не можете явно использовать значение 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;
}
Таким образом, вы можете легко скопировать и адаптировать нужную деталь ...