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