Listing the Registered File Extensions and Their Associated Icons | CodeGuru

Listing the Registered File Extensions and Their Associated Icons

This code sample shows how to retrieve all the registered file extensions from the windows registry and how to extract the associated icon. The code is quite self explanatory and comes with a sample download. option Explicit ‘ ‘ ‘Aaron Young ‘Analyst Programmer ‘ajyoung@pressenter.com ‘http://www.pressenter.com/~ajyoung ‘ ‘Add a Listbox And a Picturebox to a […]

Written By
CodeGuru Staff
CodeGuru Staff
Feb 5, 2004
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

This code sample shows how to retrieve all the registered file extensions from the windows registry and how to extract the associated icon.

Screen-shot

The code is quite self explanatory and comes with a sample download.

option Explicit
'
'
'Aaron Young
'Analyst Programmer
'ajyoung@pressenter.com <mailto:ajyoung@pressenter.com>
'http://www.pressenter.com/~ajyoung
'

'Add a Listbox And a Picturebox to a Form..

private Declare Function RegCloseKey Lib "advapi32.dll" _
        (byval hKey as Long) as Long
private Declare Function RegEnumKey Lib "advapi32.dll" _
      Alias "RegEnumKeyA" (byval hKey as Long, _
      byval dwIndex as Long, byval lpName as string, _
      byval cbName as Long) as Long
private Declare Function RegOpenKey Lib "advapi32.dll" _
      Alias "RegOpenKeyA" (byval hKey as Long, byval lpSubKey as string, _
      phkResult as Long) as Long
private Declare Function RegQueryValueEx Lib "advapi32.dll" _
        Alias "RegQueryValueExA" (byval hKey as Long, byval lpValueName as string, _
        byval lpReserved as Long, lpType as Long, _
        lpData as Any, lpcbData as Long) as Long
private Declare Function DrawIconEx Lib "user32" _
        (byval hdc as Long, byval xLeft as Long, byval yTop as Long, _
        byval hIcon as Long, byval cxWidth as Long, byval cyWidth as Long, _
        byval istepIfAniCur as Long, byval hbrFlickerFreeDraw as Long, _
        byval diFlags as Long) as Long
private Declare Function ExtractIcon Lib "shell32.dll" _
        Alias "ExtractIconA" (byval hInst as Long, _
        byval lpszExeFileName as string, _
        byval nIconIndex as Long) as Long

private Const HKEY_CLASSES_ROOT = &H80000000

private aIcons() as string

private Sub Form_Load()
    Dim sType as string        'Ext.
    Dim sName as string        'Name of File Type
    Dim sFile as string        'File Used for Default Icon
    Dim iIndex as Integer
    Dim lRegKey as Long
    Dim iFoundCount as Integer

    List1.FontName = "Courier"
    iIndex = 1

    iFoundCount = 1

    sType = Space(255)
'Enumerate all Extensions in the CLASSES Hive..
    Do While RegEnumKey(HKEY_CLASSES_ROOT, iIndex, byval sType, 255) = 0
        If Left(sType, 1) <> "." then
        else

'Store Icon Info in an Array Linked by ListIndex
            ReDim Preserve aIcons(iIndex - 1)
            sType = Left(sType, InStr(sType, Chr(0)) - 1)
'get this Extensions Name, eg - .zip = WinZip
            If RegOpenKey(HKEY_CLASSES_ROOT, byval sType, _
               lRegKey) = 0 then
                sName = Space(255)
                Call RegQueryValueEx(lRegKey, byval "", 0&, _
                     1, byval sName, 255)
                If InStr(sName, Chr(0)) then sName = _
                   Left(sName, InStr(sName, Chr(0)) - 1)
                Call RegCloseKey(lRegKey)
                If len(Trim(sName)) then
'Look for a Default Icon for this Type..
                    If RegOpenKey(HKEY_CLASSES_ROOT, sName & _
                       "\DefaultIcon\", lRegKey) = 0 then
                        sFile = Space(255)
                        Call RegQueryValueEx(lRegKey, byval "", _
                             0&, 1, byval sFile, 255)
                        If InStr(sFile, Chr(0)) then sFile = _
                           Left(sFile, InStr(sFile, Chr(0)) - 1)
                        Call RegCloseKey(lRegKey)
                        aIcons(iFoundCount - 1) = sFile
                    End If
                End If

            End If
            List1.AddItem Left(sType & Space(10), 10) & " - " & sName
            iFoundCount = iFoundCount + 1

        End If

        sType = Space(255)
        iIndex = iIndex + 1
    Loop
End Sub

private Sub List1_Click()
    Dim sFile as string
    Dim iIndex as Integer
    Dim lIcon as Long

    Picture1.Cls
    on error GoTo IconErr
'get the Icon from the File Stored in the Array for this File Type
    sFile = Left$(aIcons(List1.ListIndex), _
            InStr(aIcons(List1.ListIndex), ",") - 1)
    iIndex = Val(mid$(aIcons(List1.ListIndex), _
             InStr(aIcons(List1.ListIndex), ",") + 1))
    lIcon = ExtractIcon(App.hInstance, sFile, iIndex)
    Call DrawIconEx(Picture1.hdc, 0, 0, lIcon, 32, 32, 0, 0, 3)
IconErr:
End Sub
'

Download Zipped Project File (5k)

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.