Members

Technology Zones

IBM Learning Center

Articles

Hosted By

MaximumASP

Info

Rated
Read 49,082 times

Contents

Related Categories

File Extensions: Finding the default Icon - Declares

couling

Declares

We’re going to make a function which, when given a file name, will find the default icon for it’s type (by its extension) and then draw it onto an object. It needs two inputs, the file name and the “hDC” of the object that it is going to draw onto.

My advice to you would be to make this in a module and refer back to the subroutine we are about to write (GetDefaultIcon). You will also need (for testing purposes at least) a form containing

  • A picture box (With AutoRedraw = true). You could draw onto most things but they must have a device context (hDC value at runtime).
  • A text box (or some way of entering a file name)
  • A command button (or something to generate an event)

So lets start by declaring every thing:

'For looking at registry keys
'To: Open key ready to look at

Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
'To: Look at key
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As Any, lpcbData As Long) As Long
'To: Close the key when it's finished with
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const KEY_READ = &H20019 'To allow us to READ the registery keys

'For Drawing the icon
'To: Retrieve the icon from the .EXE, .DLL or .ICO
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
'To: Draw the icon into our picture box
Private Declare Function DrawIcon Lib "user32.dll" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long, ByVal hIcon As Long) As Long
'To: Clean up after our selves (destroy the icon that "ExtractIcon" created)
Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long

'For Finding the System folder
Private Declare Function GetSystemDirectory Lib "kernel32.dll" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

If none of this code means anything to you then don’t worry too much, just accept that what it is doing is adding seven extra functions to this program that aren’t normally in VB. If you are interested then there is an article written by James Crowley on the subject (Windows APIs) available here.

Now we need to declare the function and all its private/temporary variables:

Private Sub GetDefaultIcon(FileName As String, Picture_hDC As Long )
    Dim TempFileName As String 'Never manipulate an input unless it doubles as an output
    Dim lngError As Long'For receiving error numbers
    Dim lngRegKeyHandle As Long'Stores the "handle" of the registry key that is currently open
    Dim strProgramName As String'Stores the contents of the first registry key
    Dim strDefaultIcon As String'Stores the contents of the second registry key
    Dim lngStringLength As Long'Sets / Returns the length of the output string
    Dim lngIconNumber As Long'Stores the icon number within a file
    Dim lngIcon As Long'Stores the "Icon Handle" for the default icon
    Dim intN As Integer 'For any temporary numbers

Just graduated from the University of Birmingham. Computer Science and Artifical Intelligence 2.2 Languages: Java c++ PHP Prolog VB6

Comments

  • Re: [2982] File Extensions: Finding the default Icon

    Posted by Anishsane on 22 May 2007

    does any one want to extract image used for icon?
    the icon may be in an exe file or dll file.
    this is a veryyyyyyyy long way, and there are ready softwares available for it.

    but it is dis...

  • About lessons and codes

    Posted by PATHFINDER on 16 Jul 2005

    I'll never be thankful enough to have decided to join Developer Fusion. It's real fun to have what's needed to start with programming language. I am really amazed of the progresses i have done in two ...

  • INTERESTING

    Posted by Tochukwu on 02 Jun 2005

    THAT WAS A NICE JOB.

    I AM AN UNDERGRADUATE STUDYING COMPUTER PRORAMMING. i WILL NEED MORE EXPLANATION ON THIS TOPIC.

    tOCHUKWU.

  • Posted by jab on 18 Sep 2003

    Absolutely brilliant! Works a treat.

    THANKS VERY MUCH!!!

  • Posted by couling on 13 Sep 2003

    Looks like my reply is too large to fit in one post so I've put it [url="http://mysite.freeserve.com/visualbasic/16.htm"]here[/url].

    Hope this helps :cool: