I found this code somewhere on the web two years ago. It basically gets the large (32 x 32 pixels) and small (16 x 16 pixels) icons of an executable. The function returns an Icon object that can be displayed on a form’s icon area or used as a bitmap on a picture box or any other control that accepts bitmaps. For the code to work, create a windows application, drag a picture box control to the form area and leave it with its default name (PictureBox1).
using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsFormsApplication1 { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void Form3_Load(object sender, EventArgs e) { //the path to an executable file, i chose windows media player string wmp = @"C:\Program Files\Windows Media Player\wmplayer.exe"; //set the forms icon to the icon of the windows media player this.Icon = IconRipper.GetIcon(wmp, IconSize.Small); //display the larger icon (32 x 32) on the picturebox pictureBox1.Image = IconRipper.GetIcon(wmp, IconSize.Large).ToBitmap(); } } [StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public int dwAttributes; public string szDisplayName; public string szTypeName; } public enum IconSize { Large, //32 x 32 Small //16 x 16 } public class IconRipper { private const uint SHGFI_SYSICONINDEX = 0x4000; private const uint SHGFI_ICON = 0x100; private const uint SHGFI_LARGEICON = 0x0; private const uint SHGFI_SMALLICON = 0x1; [DllImport("Shell32.dll")] public static extern int SHGetFileInfo(string path, uint fileAttributes, out SHFILEINFO psfi, uint fileInfo, uint flags); public static Icon GetIcon(string path, IconSize iconSize) { SHFILEINFO info = new SHFILEINFO(); uint size = iconSize == IconSize.Large ? SHGFI_LARGEICON : SHGFI_SMALLICON; uint flags = SHGFI_SYSICONINDEX | size | SHGFI_ICON; int hTcdf = SHGetFileInfo(path, 0, out info, (uint)Marshal.SizeOf(typeof(SHFILEINFO)), flags); IntPtr handleIcon = info.hIcon; return Icon.FromHandle(handleIcon); } } }