RSS
StartseiteKnowledge LibraryTop 10Impressum

7.3 Wie extrahiere ich Symbole aus einer Datei und zeige diese an?

VB4-VB6

Von:  [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"
Links zum Thema