如何获取与特定文件夹关联的图标?

我的一个项目中需要我从其路径获取特定文件夹的图标。

例如:
如果我使用C:\Users\Username\Desktop我想获取与Desktop文件夹关联的图标
如果我使用具有自定义图标的文件夹的路径,我想获得该图标

不,我不想要一般默认文件夹图标

我一直在寻找将近3天没有运气。 任何帮助表示赞赏。

您可以使用本机SHGetFileInfo函数。 您可以使用.net InteropServices导入它。

有一篇知识库文章描述了如何做到这一点。

http://support.microsoft.com/kb/319350

编辑:

如何使用Shell32.SHGetFileInfo在Windows 7上获取文件夹图标

例:

 using System; using System.Drawing; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Imaging; namespace IconTest2 { public partial class MainWindow : Window { //Struct used by SHGetFileInfo function [StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; }; //Constants flags for SHGetFileInfo public const uint SHGFI_ICON = 0x100; public const uint SHGFI_LARGEICON = 0x0; // 'Large icon //Import SHGetFileInfo function [DllImport("shell32.dll")] public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); public MainWindow() { InitializeComponent(); SHFILEINFO shinfo = new SHFILEINFO(); //Call function with the path to the folder you want the icon for SHGetFileInfo( "C:\\Users\\Public\\Music", 0, ref shinfo,(uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON); using (Icon i = System.Drawing.Icon.FromHandle(shinfo.hIcon)) { //Convert icon to a Bitmap source ImageSource img = Imaging.CreateBitmapSourceFromHIcon( i.Handle, new Int32Rect(0, 0, i.Width, i.Height), BitmapSizeOptions.FromEmptyOptions()); //WPF Image control m_image.Source = img; } } } } 

SHGetFileInfo的参考资料 – http://msdn.microsoft.com/en-us/library/windows/desktop/bb762179(v=vs.85).aspx