Ассоциация-->Иконка

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Ассоциация-->Иконка

Сообщение Sirik » 28.05.2004 (Пт) 8:01

Народ помогите с одним вопросом: надо "вытащить" иконку файла по расширению. Например если *.doc, то пиктограмма Word'а и т.д.
Знаю, что подобных тем было много, но я ничего не нашёл.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.05.2004 (Пт) 8:18

Вот я нашёл значит код:
Код: Выделить всё
Option Explicit

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Const HKEY_CLASSES_ROOT = &H80000000
Private aIcons() As String

Private Sub Form_Load()
Dim sType As String
Dim sName As String
Dim sFile As String
Dim iIndex As Integer
Dim lRegKey As Long
Dim iFoundCount As Integer
iIndex = 1
iFoundCount = 1
sType = Space(255)
'Перечисление всех расширений
Do While RegEnumKey(HKEY_CLASSES_ROOT, iIndex, ByVal sType, 255) = 0
If Left(sType, 1) <> "." Then
Else
'Сохранение информации об иконке
ReDim Preserve aIcons(iIndex - 1)
sType = Left(sType, InStr(sType, Chr(0)) - 1)
'Получить имя расширения, (к примеру - .zip = WinZip)
If RegOpenKey(HKEY_CLASSES_ROOT, ByVal sType, lRegKey) = 0 Then
sName = Space(255)
Call RegQueryValueEx(lRegKey, ByVal "", 0&, 1, ByVal sName, 255)
If InStr(sName, Chr(0)) Then sName = Left(sName, InStr(sName, Chr(0)) - 1)
Call RegCloseKey(lRegKey)
If Len(Trim(sName)) Then
'Поиск иконки по умолчанию для расширения
If RegOpenKey(HKEY_CLASSES_ROOT, sName & "\DefaultIcon\", lRegKey) = 0 Then
sFile = Space(255)
Call RegQueryValueEx(lRegKey, ByVal "", 0&, 1, ByVal sFile, 255)
If InStr(sFile, Chr(0)) Then sFile = Left(sFile, InStr(sFile, Chr(0)) - 1)
Call RegCloseKey(lRegKey)
aIcons(iFoundCount - 1) = sFile
End If
End If
End If
List1.AddItem Left(sType & Space(10), 10) & " - " & sName
iFoundCount = iFoundCount + 1
End If
sType = Space(255)
iIndex = iIndex + 1
Loop
End Sub

Private Sub List1_Click()
Dim sFile As String
Dim iIndex As Integer
Dim lIcon As Long
Picture1.Cls
On Error GoTo IconErr
'Получить иконку для данного типа расширения
sFile = Left$(aIcons(List1.ListIndex), InStr(aIcons(List1.ListIndex), ",") - 1)
iIndex = Val(Mid$(aIcons(List1.ListIndex), InStr(aIcons(List1.ListIndex), ",") + 1))
lIcon = ExtractIcon(App.hInstance, sFile, iIndex)
Call DrawIconEx(Picture1.hdc, 0, 0, lIcon, 32, 32, 0, 0, 3)
IconErr:
End Sub


Работает хорошо, только вот вопросец; как полученную пиктограмму уменьшить(оня большая), может какая функция есть?

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 28.05.2004 (Пт) 15:57

Знаю, что подобных тем было много, но я ничего не нашёл.


Плохо искал.. :-)

http://bbs.vbstreets.ru/viewtopic.php?t=6571&highlight=

Ну или сразу на http://vb.narod.ru/stat/12.htm

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.05.2004 (Пт) 16:06

Scuder писал(а):
Знаю, что подобных тем было много, но я ничего не нашёл.


Плохо искал.. :-)

http://bbs.vbstreets.ru/viewtopic.php?t=6571&highlight=

Ну или сразу на http://vb.narod.ru/stat/12.htm

Я просто не корректно задал вопрос: мне надо было вытащить иконку не только из ас. файла, а ещё из любого exe. И я уже нашёл.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 2

    TopList  
cron