shraddha
shraddha

Reputation: 883

File Icons and List view

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

I read about SHGetFileInfo but I didn't understand anything from that

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

Upvotes: 4

Views: 18585

Answers (2)

Alex Essilfie
Alex Essilfie

Reputation: 12613

If you know the file name of the file whose icon you want, you can use the System.Drawing.Icon.ExtractAssociatedIcon function for that purpose. e.g.

Icon ico = System.Drawing.Icon.ExtractAssociatedIcon(@"C:\WINDOWS\system32\notepad.exe");

You can also refer to my answer to a related question for more implementation details.

Upvotes: -1

PhilPursglove
PhilPursglove

Reputation: 12589

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
        Else
            '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
            Else
                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
    Next

End Sub

GetAssociatedProgram comes from developer.com

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 = _
         Microsoft.Win32.Registry.ClassesRoot
    Dim objAppReg As Microsoft.Win32.RegistryKey = _
        Microsoft.Win32.Registry.ClassesRoot
    Dim strExtValue As String
    Try
        ' 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 & _
                        "\shell\open\command")
        ' 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", "")
        Else
            Return SplitArray(1).Replace("%1", "")
        End If
    Catch
        Return ""
    End Try
End Function

At the end of all of that, when you run this code on this folder: alt text http://www.philippursglove.com/stackoverflow/listview1.png you should get:
alt text http://www.philippursglove.com/stackoverflow/listview2.png

Upvotes: 6

Related Questions