Rubrik: Controls · ImageList | VB-Versionen: VB4, VB5, VB6 | 20.04.01 |
Icon einer Anwendung einer ImageList hinzufügen Dieser Tipp zeigt, wie Sie das Symbol einer Anwendung (EXE/DLL) einem ImageList-Control hinzufügen können. | ||
Autor: Dieter Otter | Bewertung: | Views: 26.724 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Eine häufig gestellte Frage ist: Wie ermittle ich das Icon (Symbol) einer bestimmten Anwendung oder DLL-Datei und wie bekomme ich das Icon dann in ein ImageList-Steuerelement?
Im nachfolgenden stellen wir Ihnen zwei Routinen vor:
1) Ermitteln des Icons einer Anwendung
2) Hinzufügen des Icons zu einer ImageList
' zunächst die benötigten API-Deklarationen Private Type TPictDesc cbSizeofStruct As Long PicType As Long hImage As Long xExt As Long yExt As Long End Type Private Type TGUID Data1 As Long Data2 As Integer Data3 As Integer Data4(0 To 7) As Byte End Type Private Declare Function ExtractAssociatedIcon Lib "shell32.dll" _ Alias "ExtractAssociatedIconA" ( _ ByVal hInst As Long, _ ByVal lpIconPath As String, _ lpiIcon As Long) As Long Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _ ByRef lpPictDesc As TPictDesc, _ ByRef RIID As TGUID, _ ByVal fPictureOwnsHandle As Long, _ ByRef IPic As IPicture) As Long
1. Anwendungssymbol ermitteln
Die Funktion exeGetIcon erwartet als ersten Parameter den exakten Dateinamen der Datei und den Index des Symbols (0 = Standardsymbol). Kann das Symbol ermittelt werden wird dieses als Picture zurückgegeben.
Private Function exeGetIcon(ByVal sFile As String, _ ByVal Index As Long) As Picture ' Icon aus .EXE/.DLL - Datei laden Dim Pic As Picture Dim PicDes As TPictDesc Dim IID_IDispatch As TGUID Dim Handle As Long Handle = ExtractAssociatedIcon(App.hInstance, _ sFile, Index) If Handle = 0 Then Exit Function PicDes.cbSizeofStruct = Len(PicDes) PicDes.PicType = vbPicTypeIcon PicDes.hImage = Handle IID_IDispatch.Data1 = &H20400 IID_IDispatch.Data4(0) = &HC0 IID_IDispatch.Data4(7) = &H46 Call OleCreatePictureIndirect(PicDes, _ IID_IDispatch, True, Pic) Set exeGetIcon = Pic End Function
2. Symbol einer ImageList hinzufügen
Aufbauend auf die Funktion zum Ermitteln des Anwendungs-Symbols zeigt die nachfolgende Routine, wie Sie dieses einem ImageList-Steuerelement hinzufügen können.
Die Prozedur AddIconToImageList erwartet als ersten Parameter das ImageList-Control, dann den exakten Dateinamen der Anwendung (für das Symbol) und den Index des Symbols (0=Standard-Symbol).
Private Sub AddIconToImageList(imgList As ImageList, _ sFile As String, iIndex As Integer) ' Anwendungs-Icon einer ImageList hinzufügen Dim Index As Integer Dim imgX As ListImage With imgList.ListImages Index = .Count + 1 Set imgX = .Add(Index, , exeGetIcon(sFile, _ iIndex)) End With End Sub
Beispielsaufruf:
AddIconToImageList ImageList1, _ "c:\windows\system\explorer.exe", 0