Используйте Значок файла Shell

46
задан Community 23 May 2017 в 12:26
поделиться

5 ответов

Imports System.Drawing
Module Module1

    Sub Main()    
        Dim filePath As String =  "C:\myfile.exe"  
        Dim TheIcon As Icon = IconFromFilePath(filePath)  

        If TheIcon IsNot Nothing Then    
            ''#Save it to disk, or do whatever you want with it.
            Using stream As New System.IO.FileStream("c:\myfile.ico", IO.FileMode.CreateNew)
                TheIcon.Save(stream)          
            End Using
        End If
    End Sub

    Public Function IconFromFilePath(filePath As String) As Icon
        Dim result As Icon = Nothing
        Try
            result = Icon.ExtractAssociatedIcon(filePath)
        Catch ''# swallow and return nothing. You could supply a default Icon here as well
        End Try
        Return result
    End Function
End Module
55
ответ дан Blorgbeard 26 November 2019 в 20:20
поделиться

Проигнорируйте всех говорящие Вам использовать реестр! Реестр НЕ является API AN. API, который Вы хотите, является SHGetFileInfo с SHGFI_ICON. Можно получить подпись P/Invoke здесь:

http://www.pinvoke.net/default.aspx/shell32.SHGetFileInfo

16
ответ дан 26 November 2019 в 20:20
поделиться

Этот ссылка, кажется, имеет некоторую информацию. Это включает много пересекающего реестра, но это кажется выполнимым. Примеры находятся в C++

0
ответ дан Jason Punyon 26 November 2019 в 20:20
поделиться
  • определяют расширение
  • в реестре, перейдите в "HKCR\.{extension}", считайте значение по умолчанию (давайте назовем его filetype)
  • в "HKCR\{filetype}\DefaultIcon", считайте значение по умолчанию: это - путь к файлу значка (или файл контейнера значка, как .exe со встроенным ресурсом значка)
  • в случае необходимости, используйте свой предпочтительный метод извлечения ресурса значка из упомянутого файла

, редактируют/перемещают из комментариев:

, Если значок находится в контейнерном файле (это довольно распространено), будет счетчик после пути, как это: "foo.exe,3". Это означает, что это - значок номер 4 (индекс основан на нуле) доступных значков. Значение", 0 дюймов являются неявными (и дополнительными). Если счетчик будет 0 или пропавшие без вести, кулак, то доступный значок будет использоваться оболочкой.

0
ответ дан Tomalak 26 November 2019 в 20:20
поделиться

You should use SHGetFileInfo.

Icon.ExtractAssociatedIcon works just as well as SHGetFileInfo in most cases, but SHGetFileInfo can work with UNC paths (e.g. a network path like "\\ComputerName\SharedFolder\") while Icon.ExtractAssociatedIcon cannot. If you need or might need to use UNC paths, it would be best to use SHGetFileInfo instead of Icon.ExtractAssociatedIcon.

This is good CodeProject article on how to use SHGetFileInfo.

15
ответ дан 26 November 2019 в 20:20
поделиться