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.

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)



Comments

  • Function

    Posted by Legacy on 05/21/2002 12:00am

    Originally posted by: Osiris

    Hey could someone please re-write this a function? I don't want to enumerate them all but call a function with an extension, and it set a label to the file type description, and add the icon to an imagelist. Thanks a bunch!

    Reply
  • Listing the Registered File Extensions

    Posted by Legacy on 03/14/2000 12:00am

    Originally posted by: Steve Hudson

    I have been trying to work out how to do exactly this. Great stuff!!

    • getting dlls from the registry

      Posted by mbnscs on 11/02/2004 12:21am

      i am tryng to get dlls from the registry and the set of dlls when any perticular action has occured by any user or application. so please help me in this regard.

      Reply
    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: February 12, 2015 The evolution of systems engineering with the SysML modeling language has resulted in improved requirements specification, better architectural definition, and better hand-off to downstream engineering. Agile methods have proven successful in the software domain, but how can these methods be applied to systems engineering? Check out this webcast and join Bruce Powel Douglass, author of Real-Time Agility, as he discusses how agile methods have had a tremendous …

  • The mobile market is white hot. Building a well-crafted product development plan that addresses market research, strategy, design, and development will provide the greatest chance for success. Each phase of an app's lifecycle is critical to the its overall success and feeds into the next step of the process of product development for the app. This white paper examines the five key phases of mobile app creation, one by one, to understand how they work together to help create a successful mobile app.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date