Вызовите SHGetFileInfo для описания и значка. По опыту могу сказать, что доступ к реестру и поиск в нем медленные. Я не знаю точно, как медленно. НО , мне пришлось кэшировать результаты, чтобы избежать доступа к реестру. Кроме того, надежное получение информации о файлах для всех типов файлов не так просто, как описано в пункте №1. Позвольте SHGetFileInfo надежно выполнить всю работу за вас и кэшировать результаты, чтобы повысить производительность, как показано ниже с именем типа файла.
Подробнее см. Как использовать функцию SHGetFileInfo для получения значков, связанных с файлами в Visual Basic .NET в http://support.microsoft.com/kb/319340, для простого способа получения значка.
Private Shared _descriptions As New Dictionary(Of String, String)
Private Shared Function CacheDocumentDescription(ByVal extension As String, ByVal description As String) As String
_descriptions.Add(extension, description)
DumpCacheDocumentItem(extension, description, "added")
Return description
End Function
<Conditional("DbCacheDocument")> _
Private Shared Sub DumpCacheDocumentItem(ByVal extension As String, ByVal description As String, ByVal category As String)
Debug.WriteLine(extension & ", " & description, category)
End Sub
Public Shared Function GetTypeName(ByVal fullPath As String) As String
Dim sExt As String = System.IO.Path.GetExtension(fullPath)
If Len(sExt) = 0 Then
Return "File"
End If
If _descriptions.ContainsKey(sExt) Then
'return cached value
Return _descriptions.Item(sExt)
End If
Dim sDocDescription As String = Missico.Shell.ShellFileInfo.TypeName(fullPath)
Return CacheDocumentDescription(sExt, sDocDescription)
End Function