How to get the icon associated with a specific folder?

前端 未结 1 628
眼角桃花
眼角桃花 2020-12-12 01:14

I was required in one of my projects to get the icon for specific folders from their paths.

For example:
If I use C:\\Users\\Username\\Desktop I wan

相关标签:
1条回答
  • 2020-12-12 01:50

    You could use the native SHGetFileInfo function. You can import it using the .net InteropServices.

    There's a knowledge base article describing how to do it.

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

    EDIT:

    Also

    How do I fetch the folder icon on Windows 7 using Shell32.SHGetFileInfo

    Example:

    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;
                    }
                }
            }
        }
    

    Reference for SHGetFileInfo - http://msdn.microsoft.com/en-us/library/windows/desktop/bb762179(v=vs.85).aspx

    0 讨论(0)
提交回复
热议问题