我正在使用.NET 2.0。我注意到普通桌面和常用“开始”菜单文件夹似乎没有Environment.SpecialFolder成员。
我更喜欢不涉及加载shell32.dll和使用SHGetSpecialFolderPath的方式
答案 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