shraddha shraddha - 1 year ago 106 Question

File Icons and List view

How to retrieve file icons associated with the file types and add them with the items of Listview in

i read about SHGetFileInfo but i didnt understand anything from that

please give me solution or please explain me ho system works with the .net controls
in details
please help me

Answer Source

Having looked up SHGetFileInfo I can see why you're confused by it, but I think it might be slightly overkill for what I think you're trying to do i.e. enumerating the contents of a folder and adding items to the Listview.

If we have a form that contains a ListView and an ImageList, with the two related by having the ListView's LargeImageList property set to the ImageList, then here's how we put the contents of a folder into the ListView with the icons coming from the associated EXE file for each file.

Imports System.IO
Imports System.Drawing

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim dirInfo As DirectoryInfo
    Dim fileInfo As FileInfo
    Dim exePath As String
    Dim exeIcon As Icon

    dirInfo = New DirectoryInfo(path_to_some_folder

    'We use this For...Each to iterate over the collection of files in the folder
    For Each fileInfo In dirInfo.GetFiles
        'We can only find associated exes by extension, so don't show any files that have no extension
        If fileInfo.Extension = String.Empty Then
            'Use the function to get the path to the executable for the file
            exePath = GetAssociatedProgram(fileInfo.Extension)

            'Use ExtractAssociatedIcon to get an icon from the path
            exeIcon = Drawing.Icon.ExtractAssociatedIcon(exePath)

            'Add the icon if we haven't got it already, with the executable path as the key
            If ImageList1.Images.ContainsKey(exePath) Then
                ImageList1.Images.Add(exePath, exeIcon)
            End If

            'Add the file to the ListView, with the executable path as the key to the ImageList's image
            ListView1.Items.Add(fileInfo.Name, exePath)
        End If

End Sub

GetAssociatedProgram comes from

Public Function GetAssociatedProgram(ByVal FileExtension As _
   String) As String

    ' Returns the application associated with the specified
    ' FileExtension
    ' ie, path\denenv.exe for "VB" files
    Dim objExtReg As Microsoft.Win32.RegistryKey = _
    Dim objAppReg As Microsoft.Win32.RegistryKey = _
    Dim strExtValue As String
        ' Add trailing period if doesn't exist
        If FileExtension.Substring(0, 1) <> "." Then _
            FileExtension = "." & FileExtension
        ' Open registry areas containing launching app details
        objExtReg = objExtReg.OpenSubKey(FileExtension.Trim)
        strExtValue = objExtReg.GetValue("").ToString
        objAppReg = objAppReg.OpenSubKey(strExtValue & _
        ' Parse out, tidy up and return result
        Dim SplitArray() As String
        SplitArray = Split(objAppReg.GetValue(Nothing).ToString, """")
        If SplitArray(0).Trim.Length > 0 Then
            Return SplitArray(0).Replace("%1", "")
            Return SplitArray(1).Replace("%1", "")
        End If
        Return ""
    End Try
End Function

At the end of all of that, when you run this code on this folder: alt text you should get:
alt text

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download