VB-Homepage Tipp 366

Ermitteln des Icons , das einem Dateityp zugeordnet ist

Am Besten läßt sich das Ganze wohl am Explorer verdeutlichen, da dieser genau das hier zu beschreibende nutzt. Auch dort sehen Sie vor einer *.doc Datei,
das Icon für MS Winword (soweit vorhanden) und vor einer *.jpg Datei, das Icon der Grafikanwendung, die sich öffnet, wenn Sie einen Doppelklick darauf ausführen.

Das geschieht natürlich nicht von Wunderhand, sondern im System sind die Verknüpfungen gespeichert und so, wie eben ein Doppelklick auf eine Datei, die verknüpfte Anwendung startet, so kann man auch ermitteln, welches Icon diese Anwendung besitzt und ggf. seinen Dateimanager auch diese Funktionalität geben.

1.
Für ein Demoprojekt basteln Sie sich bitte eine Drive-, Dir- und FileListBox auf      Ihre Form und verbinden diese. Dies ist lediglich zur Dateiauswahl notwendig.
Desweiteren benötigen wir noch zwei Pictureboxen zur Anzeige der Icons.
( Picture1 / Picture2 )

2.
Unter Allgemein/Deklarationen der form geben Sie folgende Deklarationen an.
Const MAX_PATH = 260
Const SHGFI_TYPENAME = &H400&
Const SHGFI_DISPLAYNAME = &H200
Const SHGFI_LARGEICON = &H0
Const SHGFI_SMALLICON = &H1
Const SHGFI_SYSICONINDEX = &H4000
Const SHGFI_SHELLICONSIZE = &H4
Const SHGFI_EXETYPE = &H2000
Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME Or SHGFI_SHELLICONSIZE _
Or SHGFI_SYSICONINDEX Or SHGFI_DISPLAYNAME Or _
SHGFI_EXETYPE

Private Type SHFILEINFO
   hIcon As Long
   iIcon As Long
   dwAttributes As Long
   szDisplayName As String * MAX_PATH
   szTypeName As String * 80
End Type

Private Declare Function ImageList_Draw Lib "comctl32.dll" (ByVal himl&, ByVal I&, ByVal hDCDest&, ByVal X&, ByVal Y&, ByVal flags&) As Long
Private Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long

3.
Nun benötigen wir die eigentliche Prozedur zum Ermitteln der Programmicons

Sub GiveFileIconFromReg(FileName As String, Optional Small As PictureBox = Null,
Optional Large As PictureBox = Null)

Dim hImgSmall As Long, hImgLarge As Long
Dim FileInfo As SHFILEINFO
Dim R As Long

If IsNull(Small) = False Then
   Small.Picture = LoadPicture()
   Small.Cls
   Small.AutoRedraw = True
   DoEvents
   hImgSmall = SHGetFileInfo(FileName, 0&, FileInfo, Len(FileInfo),    BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)
   DoEvents
   R = ImageList_Draw(hImgSmall&, FileInfo.iIcon, Small.hDC, 0, 0, ILD_TRANSPARENT)
   Small.Picture = Small.Image
   Small.AutoRedraw = False
End If

If IsNull(Large) = False Then
   Large.Picture = LoadPicture()
   Large.Cls
   Large.AutoRedraw = True
   DoEvents
   hImgLarge = SHGetFileInfo(FileName, 0&, FileInfo, Len(FileInfo), BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON)
   DoEvents
   R = ImageList_Draw(hImgLarge&, FileInfo.iIcon, Large.hDC, 0, 0, ILD_TRANSPARENT)
   Large.Picture = Large.Image
   Large.AutoRedraw = False
End If

End Sub

4.
Der FileListBox übergeben wir nun in der Doppelklick Methode den Aufruf zum        Ermitteln der zugeordneten ProgrammIcons.

Private Sub File1_DblClick()
If Right(Dir1, 1) = "\" Then
   Call GiveFileIconFromReg(Dir1 & File1, Picture1, Picture2)
Else
   Call GiveFileIconFromReg(Dir1 & "\" & File1, Picture1, Picture2)
End If
End Sub

Sie erkennen sicher schon, was der Aufruf so an Angaben benötigt.
* den Pfad zur Datei
* Den Namen der Picturebox für das 32x32 Pixel Icon
* Den Namen der Picturebox für das 16x16 Pixel Icon

5.
Starten Sie mit F5 Ihr Projekt und wählen eine Datei aus. Wenn Sie nun einen Doppelklick auf die Datei ausführen, so werden Ihnen die Icons, der diesem Dateityp zugeordneten Programm angezeigt.


Tipp-Download

Quelle : CABWARE / http://www.ls-bb.tu-cottbus.de/cebware/!start.asp

Zurück zur Übersichtsseite