如何获取‘我的文档’的显示名称 Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)这个只能获得到路径 名称还真不知道 期待高手 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 using System;using System.Collections.Generic;using System.Text;using System.Drawing;using System.IO;using System.Runtime.InteropServices;public static class ShellAPI{ [DllImport("shell32.dll", EntryPoint = "ExtractIcon", CharSet = CharSet.Auto)] private static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex); [DllImport("shell32.dll", EntryPoint = "SHGetSpecialFolderLocation", ExactSpelling = true, CharSet = CharSet.Ansi)] private static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, CSIDL nFolder, out IntPtr pPIDL); [DllImport("shell32.dll", EntryPoint = "SHGetFileInfo", ExactSpelling = false, CharSet = CharSet.Auto)] private static extern IntPtr SHGetFileInfo(string pszPath, FileAttributes dwFileAttributes, ref SHFileInfo psfi, int cbFileInfo, SHGetInfos uFlags); [DllImport("shell32.dll", EntryPoint = "SHGetFileInfo", ExactSpelling = false, CharSet = CharSet.Auto)] private static extern IntPtr SHGetFileInfo(IntPtr pPIDL, int dwFileAttributes, ref SHFileInfo psfi, int cbFileInfo, SHGetInfos uFlags); [DllImport("user32.dll", EntryPoint = "DestroyIcon", CharSet = CharSet.Auto)] private static extern bool DestroyIcon(IntPtr hIcon); /// <summary> /// 获取在浏览器中显示的图档,例如桌面,我的电脑 /// </summary> /// <param name="hInst"></param> /// <param name="sIocn"></param> /// <returns></returns> public static Icon GetSystemIcon(/*IntPtr hInst, */SystemIcons sIocn) { IntPtr hIcon = ExtractIcon(IntPtr.Zero, @"C:\WINDOWS\Explorer.exe", (int)sIocn); Icon icon = (Icon)Icon.FromHandle(hIcon).Clone(); DestroyIcon(hIcon); return icon; } /// <summary> /// 获取指定文件夹或文件的大图标 /// </summary> /// <param name="path"></param> /// <returns></returns> public static Icon GetLargeIcon(string path) { SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(path, (FileAttributes)0, ref fInfo, Marshal.SizeOf(fInfo), SHGetInfos.ICON | SHGetInfos.LARGEICON); try { Icon icon = (Icon)Icon.FromHandle(fInfo.hIcon).Clone(); DestroyIcon(fInfo.hIcon); return icon; } catch { return null; } } /// <summary> /// 获取指定文件夹或文件的小图标 /// </summary> /// <param name="path"></param> /// <returns></returns> public static Icon GetSmallIcon(string path) { SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(path, (FileAttributes)0, ref fInfo, Marshal.SizeOf(fInfo), SHGetInfos.ICON | SHGetInfos.SMALLICON); try { Icon icon = (Icon)Icon.FromHandle(fInfo.hIcon).Clone(); DestroyIcon(fInfo.hIcon); return icon; } catch { return null; } } /// <summary> /// 获取特殊文件的内存句柄 /// </summary> /// <param name="nFolder"></param> /// <returns></returns> public static IntPtr GetSpecialFolderLocation(CSIDL nFolder) { IntPtr tempPIDL = IntPtr.Zero; SHGetSpecialFolderLocation(IntPtr.Zero, nFolder, out tempPIDL); return tempPIDL; } /// <summary> /// 获取我的电脑的显示名称(不同语言版本显示不同) /// </summary> /// <returns></returns> public static string GetMyComputerName() { IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.DRIVES); SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(pPIDL, 0, ref fInfo, Marshal.SizeOf(fInfo), SHGetInfos.PIDL | SHGetInfos.DISPLAYNAME | SHGetInfos.TYPENAME); return fInfo.szDisplayName; }}/// <summary>/// 在Windows浏览器里使用的图标/// </summary>public enum SystemIcons{ MyComputer, Search, Printer, Desktop, InvalidPrinter, Unknow, UnemptyRecycle, Information, Warning, Error, What, DoubleLeftArrow, DoubleRightArrow, OpenedFolder, Earth, Envelope, WordEnvelope, Taskbar}/// <summary>/// 特殊文件的IDL值/// </summary>public enum CSIDL{ ADMINTOOLS = 0x30, ALTSTARTUP = 0x1D, APPDATA = 0x1A, BITBUCKET = 0xA, CDBURN_AREA = 0x3B, COMMON_ADMINTOOLS = 0x2F, COMMON_ALTSTARTUP = 0x1E, COMMON_APPDATA = 0x23, COMMON_DESKTOPDIRECTORY = 0x19, COMMON_DOCUMENTS = 0x2E, COMMON_FAVORITES = 0x1F, COMMON_MUSIC = 0x35, COMMON_PICTURES = 0x36, COMMON_PROGRAMS = 0x17, COMMON_STARTMENU = 0x16, COMMON_STARTUP = 0x18, COMMON_TEMPLATES = 0x2D, COMMON_VIDEO = 0x37, CONTROLS = 3, COOKIES = 0x21, DESKTOP = 0, DESKTOPDIRECTORY = 0x10, DRIVES = 0x11, //My Computer FAVORITES = 6, FLAG_CREATE = 0x8000, FONTS = 0x14, HISTORY = 0x22, INTERNET = 1, INTERNET_CACHE = 0x20, LOCAL_APPDATA = 0x1C, MYDOCUMENTS = 12, MYMUSIC = 13, MYPICTURES = 0x27, MYVIDEO = 14, NETHOOD = 0x13, NETWORK = 0x12, PERSONAL = 5, PRINTERS = 4, PRINTHOOD = 0x1B, PROFILE = 0x28, PROFILES = 0x3E, PROGRAM_FILES = 0x26, PROGRAM_FILES_COMMON = 0x2B, PROGRAMS = 2, RECENT = 8, SENDTO = 9, STARTMENU = 0xB, STARTUP = 7, SYSTEM = 0x25, TEMPLATES = 0x15, WINDOWS = 0x24}[StructLayout(LayoutKind.Sequential, CharSet= CharSet.Auto)]internal struct SHFileInfo{ public IntPtr hIcon; public int iIcon; public SHFileAttributes dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName;}[Flags]public enum SHFileAttributes : uint{ BROWSABLE = 0x8000000, CANCOPY = 1, CANDELETE = 0x20, CANLINK = 4, CANMONIKER = 0x400000, CANMOVE = 2, CANRENAME = 0x10, CAPABILITYMASK = 0x177, COMPRESSED = 0x4000000, CONTENTSMASK = 0x80000000, DISPLAYATTRMASK = 0xfc000, DROPTARGET = 0x100, ENCRYPTED = 0x2000, FILESYSANCESTOR = 0x10000000, FILESYSTEM = 0x40000000, FOLDER = 0x20000000, GHOSTED = 0x8000, HASPROPSHEET = 0x40, HASSTORAGE = 0x400000, HASSUBFOLDER = 0x80000000, HIDDEN = 0x80000, ISSLOW = 0x4000, LINK = 0x10000, NEWCONTENT = 0x200000, NONENUMERATED = 0x100000, READONLY = 0x40000, REMOVABLE = 0x2000000, SHARE = 0x20000, STORAGE = 8, STORAGEANCESTOR = 0x800000, STORAGECAPMASK = 0x70c50008, STREAM = 0x400000, VALIDATE = 0x1000000}[Flags]internal enum SHGetInfos : int{ ICON = 0x000000100, // get icon DISPLAYNAME = 0x000000200, // get display name TYPENAME = 0x000000400, // get type name ATTRIBUTES = 0x000000800, // get attributes ICONLOCATION = 0x000001000, // get icon location EXETYPE = 0x000002000, // return exe type SYSICONINDEX = 0x000004000, // get system icon index LINKOVERLAY = 0x000008000, // put a link overlay on icon SELECTED = 0x000010000, // show icon in selected state ATTR_SPECIFIED = 0x000020000, // get only specified attributes LARGEICON = 0x000000000, // get large icon SMALLICON = 0x000000001, // get small icon OPENICON = 0x000000002, // get open icon SHELLICONSIZE = 0x000000004, // get shell size icon PIDL = 0x000000008, // pszPath is a pidl USEFILEATTRIBUTES = 0x000000010,// use passed dwFileAttribute ADDOVERLAYS = 0x000000020, // apply the appropriate overlays OVERLAYINDEX = 0x000000040 // Get the index of the overlay}标红的代码能获取到‘我的电脑’的显示文本,但对其它系统文件夹拿不到,似乎SHGetInfos.DISPLAYNAME这个标记对文件夹弄不出来,不知道是不是对文件夹我的用法有问题 System.IO.Path.GetFileName(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); 那是普通文件夹,‘我的文档’的路径是‘c:\Documents and Settings\Administrator\My Documents’ 读注册表似乎可以,但不同的系统可能存在注册表的不同位置,求相关系统API foreach (Environment.SpecialFolder folder in Enum.GetValues(typeof(Environment.SpecialFolder))) { Console.Write(folder.ToString().PadRight(23, ' ')); Console.WriteLine(Environment.GetFolderPath(folder)); } #7楼的代码里我加了一个方法可以获得 "我的文档" 显示的名称internal static string GetMyDocumentName() { IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.PERSONAL); SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(pPIDL, 0, ref fInfo, Marshal.SizeOf(fInfo), SHGetInfos.PIDL | SHGetInfos.DISPLAYNAME | SHGetInfos.TYPENAME); return fInfo.szDisplayName; }IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.PERSONAL);上边这句不能用IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.MYDOCUMENTS);代表的意义不一样CSIDL_MYDOCUMENTS = 0x000c, // logical "My Documents" desktop icon 其实是个图标CSIDL_PERSONAL = 0x0005, // My Documents感谢#7楼,学到不少知识。 插个话题啊!本机电脑写的一个服务 一个控制台程序同样的代码Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)为什么 一个得到Administrator下的我的文档 此为正确路径 服务代码里写日志出来的是Default User我就郁闷了 有日志了下 权限 都是管理员 为什么读出的默认文档不一样了一台机子 一段16进制 如何转换成 字符串 c/s程序之间的调用问题 C# Windows Media Player 设置背景色 有个地磅,也就是一个称,从并口向针式打印机输出,我想直接读取这个数据可行否? C#中怎么实现调用Excel函数? 在线考试,难易度和掌握、熟悉、了解的设计 正在使用.net2.0和VS2005的请进! 在局域网中,如何从其他电脑中拷贝数据到本地机(100分) 高分求助~! ××××××××关于权限实现的讨论×××××××× 【求救】C#实现视频语音功能,聊天室那种。大家谁有好的资料共享下 互相学习学习。 我用winform做了一个程序怎么运行一段时间后自己就消失了。。
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;public static class ShellAPI
{
[DllImport("shell32.dll", EntryPoint = "ExtractIcon", CharSet = CharSet.Auto)]
private static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);
[DllImport("shell32.dll", EntryPoint = "SHGetSpecialFolderLocation", ExactSpelling = true, CharSet = CharSet.Ansi)]
private static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, CSIDL nFolder, out IntPtr pPIDL);
[DllImport("shell32.dll", EntryPoint = "SHGetFileInfo", ExactSpelling = false, CharSet = CharSet.Auto)]
private static extern IntPtr SHGetFileInfo(string pszPath, FileAttributes dwFileAttributes, ref SHFileInfo psfi, int cbFileInfo, SHGetInfos uFlags);
[DllImport("shell32.dll", EntryPoint = "SHGetFileInfo", ExactSpelling = false, CharSet = CharSet.Auto)]
private static extern IntPtr SHGetFileInfo(IntPtr pPIDL, int dwFileAttributes, ref SHFileInfo psfi, int cbFileInfo, SHGetInfos uFlags);
[DllImport("user32.dll", EntryPoint = "DestroyIcon", CharSet = CharSet.Auto)]
private static extern bool DestroyIcon(IntPtr hIcon); /// <summary>
/// 获取在浏览器中显示的图档,例如桌面,我的电脑
/// </summary>
/// <param name="hInst"></param>
/// <param name="sIocn"></param>
/// <returns></returns>
public static Icon GetSystemIcon(/*IntPtr hInst, */SystemIcons sIocn)
{
IntPtr hIcon = ExtractIcon(IntPtr.Zero, @"C:\WINDOWS\Explorer.exe", (int)sIocn);
Icon icon = (Icon)Icon.FromHandle(hIcon).Clone();
DestroyIcon(hIcon);
return icon;
} /// <summary>
/// 获取指定文件夹或文件的大图标
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static Icon GetLargeIcon(string path)
{
SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(path, (FileAttributes)0, ref fInfo, Marshal.SizeOf(fInfo),
SHGetInfos.ICON | SHGetInfos.LARGEICON);
try
{
Icon icon = (Icon)Icon.FromHandle(fInfo.hIcon).Clone();
DestroyIcon(fInfo.hIcon); return icon;
}
catch
{
return null;
}
} /// <summary>
/// 获取指定文件夹或文件的小图标
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static Icon GetSmallIcon(string path)
{
SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(path, (FileAttributes)0, ref fInfo, Marshal.SizeOf(fInfo),
SHGetInfos.ICON | SHGetInfos.SMALLICON);
try
{
Icon icon = (Icon)Icon.FromHandle(fInfo.hIcon).Clone();
DestroyIcon(fInfo.hIcon); return icon;
}
catch
{
return null;
}
} /// <summary>
/// 获取特殊文件的内存句柄
/// </summary>
/// <param name="nFolder"></param>
/// <returns></returns>
public static IntPtr GetSpecialFolderLocation(CSIDL nFolder)
{
IntPtr tempPIDL = IntPtr.Zero;
SHGetSpecialFolderLocation(IntPtr.Zero, nFolder, out tempPIDL);
return tempPIDL;
} /// <summary>
/// 获取我的电脑的显示名称(不同语言版本显示不同)
/// </summary>
/// <returns></returns>
public static string GetMyComputerName()
{
IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.DRIVES);
SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(pPIDL, 0, ref fInfo, Marshal.SizeOf(fInfo),
SHGetInfos.PIDL | SHGetInfos.DISPLAYNAME | SHGetInfos.TYPENAME); return fInfo.szDisplayName;
}
}/// <summary>
/// 在Windows浏览器里使用的图标
/// </summary>
public enum SystemIcons
{
MyComputer,
Search,
Printer,
Desktop,
InvalidPrinter,
Unknow,
UnemptyRecycle,
Information,
Warning,
Error,
What,
DoubleLeftArrow,
DoubleRightArrow,
OpenedFolder,
Earth,
Envelope,
WordEnvelope,
Taskbar
}/// <summary>
/// 特殊文件的IDL值
/// </summary>
public enum CSIDL
{
ADMINTOOLS = 0x30,
ALTSTARTUP = 0x1D,
APPDATA = 0x1A,
BITBUCKET = 0xA,
CDBURN_AREA = 0x3B,
COMMON_ADMINTOOLS = 0x2F,
COMMON_ALTSTARTUP = 0x1E,
COMMON_APPDATA = 0x23,
COMMON_DESKTOPDIRECTORY = 0x19,
COMMON_DOCUMENTS = 0x2E,
COMMON_FAVORITES = 0x1F,
COMMON_MUSIC = 0x35,
COMMON_PICTURES = 0x36,
COMMON_PROGRAMS = 0x17,
COMMON_STARTMENU = 0x16,
COMMON_STARTUP = 0x18,
COMMON_TEMPLATES = 0x2D,
COMMON_VIDEO = 0x37,
CONTROLS = 3,
COOKIES = 0x21,
DESKTOP = 0,
DESKTOPDIRECTORY = 0x10,
DRIVES = 0x11, //My Computer
FAVORITES = 6,
FLAG_CREATE = 0x8000,
FONTS = 0x14,
HISTORY = 0x22,
INTERNET = 1,
INTERNET_CACHE = 0x20,
LOCAL_APPDATA = 0x1C,
MYDOCUMENTS = 12,
MYMUSIC = 13,
MYPICTURES = 0x27,
MYVIDEO = 14,
NETHOOD = 0x13,
NETWORK = 0x12,
PERSONAL = 5,
PRINTERS = 4,
PRINTHOOD = 0x1B,
PROFILE = 0x28,
PROFILES = 0x3E,
PROGRAM_FILES = 0x26,
PROGRAM_FILES_COMMON = 0x2B,
PROGRAMS = 2,
RECENT = 8,
SENDTO = 9,
STARTMENU = 0xB,
STARTUP = 7,
SYSTEM = 0x25,
TEMPLATES = 0x15,
WINDOWS = 0x24
}[StructLayout(LayoutKind.Sequential, CharSet= CharSet.Auto)]
internal struct SHFileInfo
{
public IntPtr hIcon;
public int iIcon;
public SHFileAttributes dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
}[Flags]
public enum SHFileAttributes : uint
{
BROWSABLE = 0x8000000,
CANCOPY = 1,
CANDELETE = 0x20,
CANLINK = 4,
CANMONIKER = 0x400000,
CANMOVE = 2,
CANRENAME = 0x10,
CAPABILITYMASK = 0x177,
COMPRESSED = 0x4000000,
CONTENTSMASK = 0x80000000,
DISPLAYATTRMASK = 0xfc000,
DROPTARGET = 0x100,
ENCRYPTED = 0x2000,
FILESYSANCESTOR = 0x10000000,
FILESYSTEM = 0x40000000,
FOLDER = 0x20000000,
GHOSTED = 0x8000,
HASPROPSHEET = 0x40,
HASSTORAGE = 0x400000,
HASSUBFOLDER = 0x80000000,
HIDDEN = 0x80000,
ISSLOW = 0x4000,
LINK = 0x10000,
NEWCONTENT = 0x200000,
NONENUMERATED = 0x100000,
READONLY = 0x40000,
REMOVABLE = 0x2000000,
SHARE = 0x20000,
STORAGE = 8,
STORAGEANCESTOR = 0x800000,
STORAGECAPMASK = 0x70c50008,
STREAM = 0x400000,
VALIDATE = 0x1000000
}[Flags]
internal enum SHGetInfos : int
{
ICON = 0x000000100, // get icon
DISPLAYNAME = 0x000000200, // get display name
TYPENAME = 0x000000400, // get type name
ATTRIBUTES = 0x000000800, // get attributes
ICONLOCATION = 0x000001000, // get icon location
EXETYPE = 0x000002000, // return exe type
SYSICONINDEX = 0x000004000, // get system icon index
LINKOVERLAY = 0x000008000, // put a link overlay on icon
SELECTED = 0x000010000, // show icon in selected state
ATTR_SPECIFIED = 0x000020000, // get only specified attributes
LARGEICON = 0x000000000, // get large icon
SMALLICON = 0x000000001, // get small icon
OPENICON = 0x000000002, // get open icon
SHELLICONSIZE = 0x000000004, // get shell size icon
PIDL = 0x000000008, // pszPath is a pidl
USEFILEATTRIBUTES = 0x000000010,// use passed dwFileAttribute
ADDOVERLAYS = 0x000000020, // apply the appropriate overlays
OVERLAYINDEX = 0x000000040 // Get the index of the overlay
}标红的代码能获取到‘我的电脑’的显示文本,但对其它系统文件夹拿不到,似乎SHGetInfos.DISPLAYNAME这个标记对文件夹弄不出来,不知道是不是对文件夹我的用法有问题
System.IO.Path.GetFileName(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
那是普通文件夹,‘我的文档’的路径是‘c:\Documents and Settings\Administrator\My Documents’
读注册表似乎可以,但不同的系统可能存在注册表的不同位置,求相关系统API
foreach (Environment.SpecialFolder folder in Enum.GetValues(typeof(Environment.SpecialFolder)))
{
Console.Write(folder.ToString().PadRight(23, ' '));
Console.WriteLine(Environment.GetFolderPath(folder));
}
{
IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.PERSONAL);
SHFileInfo fInfo = new SHFileInfo(); SHGetFileInfo(pPIDL, 0, ref fInfo, Marshal.SizeOf(fInfo),
SHGetInfos.PIDL | SHGetInfos.DISPLAYNAME | SHGetInfos.TYPENAME); return fInfo.szDisplayName;
}
IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.PERSONAL);
上边这句不能用
IntPtr pPIDL = ShellAPI.GetSpecialFolderLocation(CSIDL.MYDOCUMENTS);代表的意义不一样
CSIDL_MYDOCUMENTS = 0x000c, // logical "My Documents" desktop icon 其实是个图标
CSIDL_PERSONAL = 0x0005, // My Documents感谢#7楼,学到不少知识。
本机电脑写的一个服务 一个控制台程序
同样的代码Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
为什么 一个得到Administrator下的我的文档 此为正确路径 服务代码里写日志出来的是Default User
我就郁闷了 有日志了下 权限 都是管理员 为什么读出的默认文档不一样了
一台机子