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.  |