【发布时间】:2018-09-19 06:28:12
【问题描述】:
请回答问题 否则不回答这个问题。
让我重新开始。如何使用这个扩展了内部 Environment.GetSpecialFolder 的类?
我不想要特殊的根
root = Environment.GetFolderPath(Environment.SpecialFolder)
因为我想将其用于其他目的而不是 .net。
例如,如何通过单击按钮调用 (Favorites = 6) 位置?
public class EnvironmentFolders
{
public enum SpecialFolder
{
AdministrativeTools = 48,
//{user name}\Start Menu\Programs\Administrative Tools
ApplicationData = 26,
//{user name}\Application Data
CommonAdministrativeTools = 47,
//All Users\Start Menu\Programs\Administrative Tools
CommonApplicationData = 35,
//All Users\Application Data
CommonDesktopDirectory = 25,
//All Users\Desktop
CommonDocuments = 46,
//All Users\Documents
CommonFavorites = 31,
CommonNonLocalizedStartup = 30,
//non localized common startup
CommonPrograms = 23,
//All Users\Programs
CommonStartMenu = 22,
//All Users\Start Menu
CommonStartup = 24,
//All Users\Startup
CommonTemplates = 45,
//All Users\Templates
ControlPanel = 3,
//My Computer\Control Panel
Cookies = 33,
DesktopDirectory = 16,
//{user name}\Desktop
Favorites = 6,
//{user name}\Favorites
Fonts = 20,
//windows\fonts
History = 34,
InternetCache = 32,
LocalApplicationData = 28,
//{user name}\Local Settings\Application Data (non roaming)
MyDocuments = 5,
//My Documents
MyPictures = 39,
//C:\Program Files\My Pictures
NetworkShortcuts = 19,
//{user name}\nethood
NonLocalizedStartup = 29,
//non localized startup
Printers = 4,
//My Computer\Printers
PrintHood = 27,
//{user name}\PrintHood
ProgramFiles = 38,
//C:\Program Files
ProgramFilesCommon = 43,
//C:\Program Files\Common
Programs = 2,
//Start Menu\Programs
Recent = 8,
//{user name}\Recent
RecycleBin = 10,
//{desktop}\Recycle Bin
SendTo = 9,
//{user name}\SendTo
StartMenu = 11,
//{user name}\Start Menu
Startup = 7,
//Start Menu\Programs\Startup
System = 37,
//GetSystemDirectory()
Templates = 21,
UserProfile = 40,
//USERPROFILE
Windows = 36
//GetWindowsDirectory()
}
[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
/// <summary>
/// Get an environment folder path for Windows environment folders
/// </summary>
/// <returns>A string pointing to the special path</returns>
/// <remarks></remarks>
public static string GetPath(SpecialFolder folder)
{
StringBuilder lpszPath = new StringBuilder(260);
SHGetFolderPath(IntPtr.Zero, (int)folder, IntPtr.Zero, 0, lpszPath);
return lpszPath.ToString();
}
}
【问题讨论】:
-
使用互操作来完成 .NET 自己可以完美处理的事情?这闻起来像是刚搬到 .NET 并且懒得阅读文档的 C/C++ 程序员的 copypasta。重构!
-
"例如,我如何通过单击按钮调用 (Favorites = 6) 位置?我们想提供帮助,但不明白您的意思。 听起来就像您在询问如何在用户单击按钮时使用
EnvironmentFolders类来获取当前用户的“收藏夹”文件夹的位置。 (在 Windows 窗体中?在 ASP.NET 页面上?不知道。)这令人困惑,因为我认为所有三个答案都解释了这一点。请尝试改写问题,以便我们知道您想做什么。
标签: c#