Microsoft small business knowledge base

Article ID: 319340 - Last Review: July 6, 2004 - Revision: 2.0

This article was previously published under Q319340
For a Microsoft Visual C# .NET version of this article, see 319350  ( ) .

On This Page


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 Basic 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 at the beginning of the Form1.vb file.
    Imports System.Runtime.InteropServices
  2. Add the following code in the Form1 class after the INHERITS statement.
    Private Structure SHFILEINFO
            Public hIcon As IntPtr ' : icon
            Public iIcon As Integer ' : icondex
            Public dwAttributes As Integer ' : SFGAO_ flags
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
            Public szDisplayName As String
            <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
            Public szTypeName As String
    End Structure
    Private Declare Ansi Function SHGetFileInfo Lib "shell32.dll" (ByVal pszPath As String, _
    ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Integer, _
    ByVal uFlags As Integer) As IntPtr
    Private Const SHGFI_ICON = &H100
    Private Const SHGFI_SMALLICON = &H1
    Private Const SHGFI_LARGEICON = &H0         ' Large icon
    Private nIndex = 0
  3. Add a listView control, a button control, and an imageList control to the form. The default names are ListView1, Button1, and ImageList1 respectively.
  4. 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:
    Dim hImgSmall As IntPtr  'The handle to the system image list.
    Dim hImgLarge As IntPtr  'The handle to the system image list.
    Dim fName As String      'The file name to get the icon from.
    Dim shinfo As SHFILEINFO
    shinfo = New SHFILEINFO()
    Dim openFileDialog1 As OpenFileDialog
    openFileDialog1 = New OpenFileDialog()
    openFileDialog1.InitialDirectory = "c:\temp\"
    openFileDialog1.Filter = "All files (*.*)|*.*"
    openFileDialog1.FilterIndex = 2
    openFileDialog1.RestoreDirectory = True
    listView1.SmallImageList = imageList1
    listView1.LargeImageList = ImageList1
    shinfo.szDisplayName = New String(Chr(0), 260)
    shinfo.szTypeName = New String(Chr(0), 80)
    If (openFileDialog1.ShowDialog() = DialogResult.OK) Then
         fName = openFileDialog1.FileName
         'Use this to get the small icon.
         hImgSmall = SHGetFileInfo(fName, 0, shinfo, Marshal.SizeOf(shinfo), _
         'Use this to get the large icon.
         'hImgLarge = SHGetFileInfo(fName, 0, 
         'ref shinfo, (uint)Marshal.SizeOf(shinfo), 
         'The icon is returned in the hIcon member of the shinfo struct.
         Dim myIcon As System.Drawing.Icon
         myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon)
         imageList1.Images.Add(myIcon) 'Add icon to imageList.
         listView1.Items.Add(fName, nIndex) 'Add file name and icon to listview.
         nIndex = nIndex + 1
    End If

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.


For additional information in a Microsoft Visual C# .NET version of this article, click the article number below to view the article in the Microsoft Knowledge Base:
319350  ( ) How To Use the SHGetFileInfo Function To Get the Icons That Are Associated with Files in Visual C# .NET

  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
kbhowtomaster KB319340
Additional support options
Ask The Microsoft Small Business Support Community
Contact Microsoft Small Business Support
Find Microsoft Small Business Support Certified Partner
Find a Microsoft Store For In-Person Small Business Support