VB4-VB6
Von: Tobias Schikora [Home]
Einige Dateitypen, wie EXE, DLL, ICO und ICL, enthalten Symbolinformationen, die mit VB ausgelesen und angezeigt werden können. Für diese Aufgabe benötigt man drei API - Funktionen: Die ExtractIcon - Funktion, welche das Icon ausliest und ein Handle zurückgibt, die DrawIcon - Funktion, um ein Icon (vom dem das Handle bekannt ist) auf dem Bildschirm zu zeichnen und die DestroyIcon - Funktion, um den Icon - Handle nach seiner Verwendung zu zerstören. Hier aber erst mal die Deklarationen:
Private Declare Function ExtractIcon Lib "shell32.dll" Alias _ "ExtractIconA" (ByVal hInst As Long, _ ByVal lpszExeFileName As String, ByVal nIndex 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 Private Declare Function DestroyIcon Lib "user32" _ (ByVal hIcon As Long) As Long
Sinnvoll kombiniert, lassen sich diese beiden Funktionen übersichtlich in nur wenigen Zeilen Code anwenden:
Dim hIcon As Long hIcon = ExtractIcon(App.hInstance, "[Dateiname]", [Index]) With Picture1 .AutoRedraw = True DrawIcon .hdc, 0, 0, hIcon Set .Picture = .Image .AutoRedraw = False End With DestroyIcon hIcon
Picture1.hdc ist der Gerätekontext. Damit weiß die Funktion "wohin" sie das Icon zeichnen soll (in unserem Fall ist es das Picture1-Objekt). [Dateiname] und [Index] müssen Sie natürlich in der obigen Codezeile anpassen und durch sinnvolle Parameterübergaben ersetzen. Wird als [Index] der Wert "-1" angegeben, liefert die ExtractIcon - Funktion zurück, wie viele Icons sich in der Datei [Dateiname] befinden.
Um dieses noch einmal zu veranschaulichen, hier noch ein Beispiel um die Anzahl der in einer Symboldatei existierenden Einzelsymbole herauszulesen:
Dim AnzahlSymbole As Long AnzahlSymbole = ExtractIcon(App.hInstance, "[Dateiname]", -1) MsgBox "Es befinden sich " & CStr(AnzahlSymbole) & " Symbole in der Datei", _ vbInformation, "Anzahl der Symbole"