Microsoft KB Archive/185883

= How To Extract an Icon from a Windows Program =

Article ID: 185883

Article Last Modified on 7/1/2004

-

APPLIES TO


 * Microsoft Visual Basic 5.0 Learning Edition
 * Microsoft Visual Basic 6.0 Learning Edition
 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 6.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition
 * Microsoft Visual Basic 6.0 Enterprise Edition
 * Microsoft Visual Basic 4.0 Standard Edition
 * Microsoft Visual Basic 4.0 Professional Edition
 * Microsoft Visual Basic 4.0 32-Bit Enterprise Edition

-



This article was previously published under Q185883



SUMMARY
The sample code given below demonstrates how to extract an icon from a 32-bit Microsoft Windows program or DLL file.



MORE INFORMATION
The sample program displays the icon of an application in a picture box. It also shows how to cause the image to remain by using the AutoRedraw property of the picture box.

Step-by-Step Example
 Start Visual Basic, or from the File menu, click New Project (ALT+F, N) if Visual Basic is already running. Form1 is created by default. Add a Command button and a Picture box control to Form1. Adjust the size of Picture1 so that a 32*32 icon fits inside the picture box.  Add the following code to the General Declarations section of Form1: Option Explicit Private Const MAX_PATH = 260

Private Declare Function GetSystemDirectory Lib "kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, _                            ByVal nSize 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 Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, _     ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

Dim path$, nIcon As Long

Private Sub Command1_Click Dim hIcon As Long

hIcon = ExtractIcon(App.hInstance, path$, nIcon) Set Picture1.Picture = LoadPicture("") ' Clear the picture box Picture1.AutoRedraw = True Call DrawIcon(Picture1.hdc, 0, 0, hIcon) Picture1.AutoRedraw = False Picture1.Refresh nIcon = nIcon + 1 End Sub

Private Sub Form_Load ' Store the full path to the file containing the icon(s). path$ = Space$(MAX_PATH) Call GetSystemDirectory(path$, MAX_PATH) path$ = Trim$(path$) ' Trim trailing blanks & Null terminator path$ = Left$(path$, Len(path$) - 1) & "\Shell32.dll" nIcon = 0 End Sub

 Press F5 to run the program. Click Command1 to copy the first icon stored in Shell32.dll to Picture1. Each subsequent click of Command1 displays a different icon.

