Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
 Аватар для chiribas
12 / 12 / 0
Регистрация: 06.05.2011
Сообщений: 250

Как получить иконку файла, ассоциированную с ним

06.11.2012, 00:45. Показов 2917. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как получить иконку файла, расширение которого хранится в переменной?
Я знаю как получить иконку файла на компьютере, зная его расположение и имя. Можно было бы в пустой папке создать пустые файлы разных форматов и "вытащить" из них иконки, но тогда как получить список всех расширений зарегистрированных на компьютере?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2012, 00:45
Ответы с готовыми решениями:

Получить иконку, ассоциированную с заданным расширением
Народ, подскажите пожалуйста кто знает: Как сделать привязку для имени файла? Например у меня есть список файлов в текстовом виде а...

Как получить иконку файла?
Мне нужны не те иконки, которые выгрызает из exe-шников и т.п. ExtractIcon(), а те иконки, которые Windows ассоциирует с различными типами...

Как получить иконку исполняемого файла (*.ico)?
Придумали какое-то убожество и обозвали его ExtractAssociatedIcon, лучше бы вообще ничего не придумывали. Поехали: using System; using...

2
10 / 10 / 2
Регистрация: 02.11.2012
Сообщений: 65
06.11.2012, 11:43
Думаю, то что нужно:
Кликните здесь для просмотра всего текста

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
Imports System
Imports System.Collections.Generic
Imports System.Collections
Imports System.Text
Imports System.Runtime.InteropServices
Imports Microsoft.Win32
Imports System.Drawing
Namespace FileTypeAndIcon
 
      Public Structure EmbeddedIconInfo
            Public FileName As String
            Public IconIndex As Integer
      End Structure
 
      Public Class RegisteredFileType
#Region "APIs"
 
            Private Shared Function ExtractIcon(ByVal hInst As Integer, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As IntPtr
            End Function
            <DllImport("shell32.dll", CharSet:=CharSet.Auto)> _
            Private Shared Function ExtractIconEx(ByVal szFileName As String, ByVal nIconIndex As Integer, ByVal phiconLarge As IntPtr(), ByVal phiconSmall As IntPtr(), ByVal nIcons As UInteger) As UInteger
            End Function
            <DllImport("user32.dll", EntryPoint:="DestroyIcon", SetLastError:=True)> _
            Private Shared Function DestroyIcon(ByVal hIcon As IntPtr) As Integer
            End Function
 
#End Region
 
            Public Shared Function GetFileTypeAndIcon() As Hashtable
                  Try
                        ' Create a registry key object to represent the HKEY_CLASSES_ROOT registry section
                        Dim rkRoot As RegistryKey = Registry.ClassesRoot
                        'Gets all sub keys' names.
                        Dim keyNames As String() = rkRoot.GetSubKeyNames()
                        Dim iconsInfo As New Hashtable()
                        'Find the file icon.
                        For Each keyName As String In keyNames
                              If [String].IsNullOrEmpty(keyName) Then
                                    Continue For
                              End If
                              Dim indexOfPoint As Integer = keyName.IndexOf(".")
                              'If this key is not a file exttension(eg, .zip), skip it.
                              If indexOfPoint <> 0 Then
                                    Continue For
                              End If
                              Dim rkFileType As RegistryKey = rkRoot.OpenSubKey(keyName)
                              If rkFileType Is Nothing Then
                                    Continue For
                              End If
                              'Gets the default value of this key that contains the information of file type.
                              Dim defaultValue As Object = rkFileType.GetValue("")
                              If defaultValue Is Nothing Then
                                    Continue For
                              End If
                              'Go to the key that specifies the default icon associates with this file type.
                              Dim defaultIcon As String = defaultValue.ToString() & "\DefaultIcon"
                              Dim rkFileIcon As RegistryKey = rkRoot.OpenSubKey(defaultIcon)
                              If rkFileIcon IsNot Nothing Then
                                    'Get the file contains the icon and the index of the icon in that file.
                                    Dim value As Object = rkFileIcon.GetValue("")
                                    If value IsNot Nothing Then
                                          'Clear all unecessary " sign in the string to avoid error.
                                          Dim fileParam As String = value.ToString().Replace("""", "")
                                          iconsInfo.Add(keyName, fileParam)
                                    End If
                                    rkFileIcon.Close()
                              End If
                              rkFileType.Close()
                        Next
                        rkRoot.Close()
                        Return iconsInfo
                  Catch exc As Exception
                        Throw exc
                  End Try
            End Function
 
            Public Shared Function ExtractIconFromFile(ByVal fileAndParam As String) As Icon
                  Try
                        Dim embeddedIcon As EmbeddedIconInfo = getEmbeddedIconInfo(fileAndParam)
                        'Gets the handle of the icon.
                        Dim lIcon As IntPtr = ExtractIcon(0, embeddedIcon.FileName, embeddedIcon.IconIndex)
                        'Gets the real icon.
                        Return Icon.FromHandle(lIcon)
                  Catch exc As Exception
                        Throw exc
                  End Try
            End Function
            Public Shared Function ExtractIconFromFile(ByVal fileAndParam As String, ByVal isLarge As Boolean) As Icon
                  Dim readIconCount As UInteger = 0
                  Dim hDummy As IntPtr() = New IntPtr(0) {IntPtr.Zero}
                  Dim hIconEx As IntPtr() = New IntPtr(0) {IntPtr.Zero}
                  Try
                        Dim embeddedIcon As EmbeddedIconInfo = getEmbeddedIconInfo(fileAndParam)
                        If isLarge Then
                              readIconCount = ExtractIconEx(embeddedIcon.FileName, 0, hIconEx, hDummy, 1)
                        Else
                              readIconCount = ExtractIconEx(embeddedIcon.FileName, 0, hDummy, hIconEx, 1)
                        End If
                        If readIconCount > 0 AndAlso hIconEx(0) <> IntPtr.Zero Then
                              ' Get first icon.
                              Dim extractedIcon As Icon = DirectCast(Icon.FromHandle(hIconEx(0)).Clone(), Icon)
                              Return extractedIcon
                        Else
                              ' No icon read
                              Return Nothing
                        End If
                  Catch exc As Exception
                        ' Extract icon error.
                        Throw New ApplicationException("Could not extract icon", exc)
                  Finally
                        ' Release resources.
                        For Each ptr As IntPtr In hIconEx
                              If ptr <> IntPtr.Zero Then
                                    DestroyIcon(ptr)
                              End If
                        Next
                        For Each ptr As IntPtr In hDummy
                              If ptr <> IntPtr.Zero Then
                                    DestroyIcon(ptr)
                              End If
                        Next
                  End Try
            End Function
            Protected Shared Function getEmbeddedIconInfo(ByVal fileAndParam As String) As EmbeddedIconInfo
                  Dim embeddedIcon As New EmbeddedIconInfo()
                  If [String].IsNullOrEmpty(fileAndParam) Then
                        Return embeddedIcon
                  End If
                  'Use to store the file contains icon.
                  Dim fileName As String = [String].Empty
                  'The index of the icon in the file.
                  Dim iconIndex As Integer = 0
                  Dim iconIndexString As String = [String].Empty
                  Dim commaIndex As Integer = fileAndParam.IndexOf(",")
                  'if fileAndParam is some thing likes that: "C:\\Program Files\\NetMeeting\\conf.exe,1".
                  If commaIndex > 0 Then
                        fileName = fileAndParam.Substring(0, commaIndex)
                        iconIndexString = fileAndParam.Substring(commaIndex + 1)
                  Else
                        fileName = fileAndParam
                  End If
                  If Not [String].IsNullOrEmpty(iconIndexString) Then
                        'Get the index of icon.
                        iconIndex = Integer.Parse(iconIndexString)
                        If iconIndex < 0 Then
                              iconIndex = 0
                              'To avoid the invalid index.
                        End If
                  End If
                  embeddedIcon.FileName = fileName
                  embeddedIcon.IconIndex = iconIndex
                  Return embeddedIcon
            End Function
 
      End Class
End Namespace
 
 
=====================================================
 
form code
 
 
 
      Private Sub showIcon1(ByVal fileType As String)
            Try
                  Dim fileAndParam As String = (Me.iconsInfo(fileType)).ToString()
                  If [String].IsNullOrEmpty(fileAndParam) Then
                        Return
                  End If
                  Dim icon As Icon = Nothing
                  Dim isLarge As Boolean = True
                  'If currentSize = ImageSize.Small Then
                  '      isLarge = False
                  'End If
                  isLarge = True
                  icon = RegisteredFileType.ExtractIconFromFile(fileAndParam, isLarge)
                  'RegisteredFileType.ExtractIconFromFile(fileAndParam);
                  'The icon cannot be zero.
                  If icon IsNot Nothing Then
                        'Draw the icon to the picture box.
                        Me.pbIconView.Image = icon.ToBitmap()
                  Else
                        'if the icon is invalid, show an error image.
                        Me.pbIconView.Image = Me.pbIconView.ErrorImage
                  End If
            Catch exc As Exception
                  Throw exc
            End Try
      End Sub
 
      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                  'Gets file type and icon info.
                  Me.iconsInfo = RegisteredFileType.GetFileTypeAndIcon()
                  'Me.currentSize = ImageSize.Large
                  ''Loads file types to ListBox.
                  'For Each objString As Object In Me.iconsInfo.Keys
                  '      Me.lbxFileType.Items.Add(objString)
                  'Next
            Catch exc As Exception
                  MessageBox.Show(exc.Message)
            End Try
      End Sub
0
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
20.02.2016, 04:58
Цитата Сообщение от nurz Посмотреть сообщение
Думаю, то что нужно
Поясните пожалуйста куда вставлять код, расположенный выше строки 161 (form code)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2016, 04:58
Помогаю со студенческими работами здесь

Как получить иконку из файла или из папки?
Здравствуйте! Хочу сделать что-то типа проводника с использованием TreeView, только проблема в том, что не знаю как получить иконку...

Получить имя файла и иконку
Здравствуйте! Возник возможно легкий вопрос. Нужно сделать такую программу: пользователь указывает путь к файлу например 2312.exe и после...

Как получить иконку в файле shell32.dll ?
Как сделать чтобы этот код работал с индексами иконок? 'C:WIN98RUSSYSTEMshell32.dll,3', т.е получить иконку в файле shell32.dll под...

Как вытащить иконку из файла
Не могу никак сохранить иконку в отличном качестве в формате 32x32. Использовал ресурсы из: ...

Как изменить иконку exe-файла
Как изменить иконку у .exe файла, написанного на PascalABC.NET, чтобы она появлялась после компилирования? (Restorator не редактирует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru