Web Analytics Made Easy -
StatCounter Post a C#: accessing shell icons. - CodingForum

Announcement

Collapse
No announcement yet.

Post a C#: accessing shell icons.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Post a C#: accessing shell icons.

    ShellIcon.cs
    Code:
    using System;
    using System.Drawing;
    using System.Runtime.InteropServices;
    
    namespace sampleNameSpace
    {
    	/// <summary>
    	/// Summary description for ShellIcon.
    	/// </summary>
    	/// <summary>
    	/// Summary description for ShellIcon.  Get a small or large Icon with an easy C# function call
    	/// that returns a 32x32 or 16x16 System.Drawing.Icon depending on which function you call
    	/// either GetSmallIcon(string fileName) or GetLargeIcon(string fileName)
    	/// </summary>
    	public class ShellIcon
    	{
    		[StructLayout(LayoutKind.Sequential)]
    			public struct SHFILEINFO 
    		{
    			public IntPtr hIcon;
    			public IntPtr iIcon;
    			public uint dwAttributes;
    			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
    			public string szDisplayName;
    			[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
    			public string szTypeName;
    		};
    
    
    		class Win32
    		{
    			public const uint SHGFI_ICON = 0x100;
    			public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
    			public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
    
    
    			[DllImport("shell32.dll")]
    			public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
    		}
    
    
    		public ShellIcon()
    		{
    			//
    			// TODO: Add constructor logic here
    			//
    		}
    
    
    		public static Icon GetSmallIcon(string fileName)
    		{
    			IntPtr hImgSmall; //the handle to the system image list
    			SHFILEINFO shinfo = new SHFILEINFO();
    
    
    			//Use this to get the small Icon
    			hImgSmall = Win32.SHGetFileInfo(fileName, 0, ref shinfo,(uint)Marshal.SizeOf(shinfo),Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
    
    
    			//The icon is returned in the hIcon member of the shinfo struct
    			return System.Drawing.Icon.FromHandle(shinfo.hIcon);                
    		}
    
    
    		public static Icon GetLargeIcon(string fileName)
    		{
    			IntPtr hImgLarge; //the handle to the system image list
    			SHFILEINFO shinfo = new SHFILEINFO();
    
    
    			//Use this to get the large Icon
    			hImgLarge = Win32.SHGetFileInfo(fileName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);
    
    
    			//The icon is returned in the hIcon member of the shinfo struct
    			return System.Drawing.Icon.FromHandle(shinfo.hIcon);                
    		}
    	}
    }
    usage:

    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    
    using System.Collections;
    using System.Drawing;
    
    namespace sampleNameSpace
    {
        public partial class myTree : TreeView
        {
            private ImageList _imageList = new ImageList();
            private Hashtable _systemIcons = new Hashtable();
            public static readonly int Folder = 0;
    
            public myTree()
            {
                this.ImageList = _imageList; // shell icons
    // may have to alter this to fit your pc. just find a file and point it to it.
                TreeNode myNode = new TreeNode("C:\\Program Files\\Microsoft Visual Studio 8\\Common7\\Tools\\spyxx.exe");
                myNode.ImageIndex = GetIconImageIndex(myNode.Text);
                myNode.SelectedImageIndex = myNode.ImageIndex;
                this.Nodes.Add(myNode);
            }
            public int GetIconImageIndex(string path)
            {
                string extension = Path.GetExtension(path);
    
                if (_systemIcons.ContainsKey(extension) == false)
                {
                    Icon icon = ShellIcon.GetSmallIcon(path);
                    _imageList.Images.Add(icon);
                    _systemIcons.Add(extension, _imageList.Images.Count - 1);
                }
    
                return (int)_systemIcons[Path.GetExtension(path)];
            }
        }
    }
    public string ConjunctionJunction(string words, string phrases, string clauses)
    {
    return (String)(words + phrases + clauses);
    }
    <--- Was I Helpfull? Let me know ---<
Working...
X