Listing the Registered File Extensions and Their Associated Icons
Posted
by Aaron Young
on February 5th, 2004
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 '

Comments
Function
Posted by Legacy on 05/21/2002 12:00amOriginally 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!
ReplyListing the Registered File Extensions
Posted by Legacy on 03/14/2000 12:00amOriginally posted by: Steve Hudson
I have been trying to work out how to do exactly this. Great stuff!!
-
Replygetting dlls from the registry
Posted by mbnscs on 11/02/2004 12:21ami 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