Getting Associated Icons Using C# | CodeGuru

Getting Associated Icons Using C#

Environment: VC#.NET How to Use the SHGetFileInfo Function to Get the Icons That Are Associated with Files in Visual C# .NET Summary This step-by-step article describes how to use the SHGetFileInfo function to get the icons that are associated with files. Create a Windows Forms Application Start Microsoft Visual Studio .NET. On the File menu, […]

Written By
CodeGuru Staff
CodeGuru Staff
Oct 22, 2003
1 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Environment: VC#.NET

How to Use the SHGetFileInfo Function to Get the Icons That Are Associated with Files in Visual C# .NET

Summary

This step-by-step article describes how to use the SHGetFileInfo function to get the icons that are associated with files.

Create a Windows Forms Application

  1. Start Microsoft Visual Studio .NET.
  2. On the File menu, point to New, and then click Project.
  3. In the New Project dialog box, click Visual C# Projects under Project Types, and then click Windows Application under Templates.
  4. In the Name box, type GetIconSample.

Use the SHGetFileInfo Function

  1. Add the following code in the Form1.cs file at the end of the USING statements:
  2. using System.Runtime.InteropServices;
  3. Add the following code at the beginning of the GetIconSample namespace:
  4. [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);
    }
    
  5. Add the following code in the Form1 class after the PRIVATE statements:
  6. private int nIndex = 0;
  7. Add a listView control, a button control, and an imageList control to the form. The default names are listView1, button1, and imageList1, respectively.
  8. In the Properties window of button1, set the button text to Select a File, and then add the following code in the button1_click event:
  9. IntPtr hImgSmall;    //the handle to the system image list
    IntPtr hImgLarge;    //the handle to the system image list
    string fName;        // 'the file name to get icon from
    SHFILEINFO shinfo = new SHFILEINFO();
    
    OpenFileDialog openFileDialog1   = new OpenFileDialog();
    openFileDialog1.InitialDirectory = "c:\temp\";
    openFileDialog1.Filter           = "All files (*.*)|*.*";
    openFileDialog1.FilterIndex      = 2;
    openFileDialog1.RestoreDirectory = true ;
    
    listView1.SmallImageList = imageList1;
    listView1.LargeImageList = imageList1;
    
    if(openFileDialog1.ShowDialog() == DialogResult.OK)
    {
       fName = openFileDialog1.FileName;
       //Use this to get the small Icon
       hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo,
                                      (uint)Marshal.SizeOf(shinfo),
                                       Win32.SHGFI_ICON |
                                       Win32.SHGFI_SMALLICON);
    
      //Use this to get the large Icon
      //hImgLarge = SHGetFileInfo(fName, 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
      System.Drawing.Icon myIcon =
             System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
      imageList1.Images.Add(myIcon);
    
      //Add file name and icon to listview
      listView1.Items.Add(fName, nIndex++);
    }
    
Advertisement

Run the Project

  1. Compile the project: On the Build menu, click Build Solution.
  2. Press F5 to run the project.
  3. Click Select a File, and then select a file in the Open dialog box. The name of the file and the icon that is associated with the file appear in the ListView control.
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.