Стандартные иконки для папок, дисков и файлов.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ugin_95
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 19.07.2009 (Вс) 6:42

Стандартные иконки для папок, дисков и файлов.

Сообщение ugin_95 » 14.11.2009 (Сб) 10:00

знаю что стандартные иконки находятся в файле shell32.dll , адля определённых фарматов в HKEY_CLASSES_ROOT/.расширение/
как мне получить иконки типа System.Drawing.Image?
плиз поподробнее...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стандартные иконки для папок, дисков и файлов.

Сообщение MIT » 14.11.2009 (Сб) 12:12

Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ugin_95
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 19.07.2009 (Вс) 6:42

Re: Стандартные иконки для папок, дисков и файлов.

Сообщение ugin_95 » 15.11.2009 (Вс) 13:53

в примере разобрался и попробовал его...
ели список большой то работает оочень медленно (подходит только для файлов)и получить иконки полной карзины открытой папки и т.д не получается т.к в функции первым параметром идёт адрес
Код: Выделить всё
Private Declare Ansi Function SHGetFileInfo Lib "shell32.dll" (ByVal pszPath As String, ByVal dwFileAttributes As Integer, ByRef psfi As SHFILEINFO, ByVal cbFileInfo As Integer, ByVal uFlags As Integer) As IntPtr

Как получить эти иконки ? (для дисков, открытой папки, полной карзины и т.п.) вообшем все иконки из "shell32.dll" не используя путь к файлу или папке

ugin_95
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 19.07.2009 (Вс) 6:42

Re: Стандартные иконки для папок, дисков и файлов.

Сообщение ugin_95 » 15.11.2009 (Вс) 13:59

или по раширению файла

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Стандартные иконки для папок, дисков и файлов.

Сообщение MIT » 15.11.2009 (Вс) 16:13

ugin_95 писал(а):ели список большой то работает оочень медленно
Дело, скорее всего, в нерациональном подходе к построению списка: изображения надо кэшировать и брать для каждого расширения иконку только один раз.
ugin_95 писал(а):или по раширению файла
Путь в функцию дается именно для вытягивания из него расширения файла. Сам не пробовал, но, теоретически, туда можно отправлять что-то типа "SomeFile.ext", где ext - искомое расширение. Полный путь, по идее, нужен только для вытягивания изображений из исполняемых файлов.
А вообще, если по хорошему, список надо строить в одном потоке, а изображения к нему приделывать в другом, дабы две задачи не мешались друг другу.
ugin_95 писал(а):Как получить эти иконки ? (для дисков, открытой папки, полной карзины и т.п.)
ExtractIcon(Ex) и номер иконки тебе в помощь.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Стандартные иконки для папок, дисков и файлов.

Сообщение Nord777 » 15.11.2009 (Вс) 16:13

ugin_95 писал(а):вообшем все иконки из "shell32.dll" не используя путь к файлу или папке


Код: Выделить всё
Imports System.Runtime.InteropServices

Public Class Form1
   <DllImport("shell32.dll")> _
   Private Shared Function ExtractIcon(ByVal hInst As IntPtr, ByVal lpszExeFileName$, ByVal nIconIndex As Integer) As IntPtr
   End Function

   <DllImport("user32.dll")> _
   Private Shared Function DestroyIcon(ByVal hIcon As IntPtr) As Integer
   End Function

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      Dim System32$ = Environment.GetFolderPath(Environment.SpecialFolder.System)
      Dim fileName$ = IO.Path.Combine(System32, "shell32.dll")
      Dim hIcon As IntPtr
      Dim MyIcon As System.Drawing.Icon
      Dim index As Integer

      ListView1.LargeImageList = ImageList1
      Do
         hIcon = ExtractIcon(IntPtr.Zero, fileName, index)
         If hIcon = 0 Then Exit Do

         MyIcon = System.Drawing.Icon.FromHandle(hIcon)
         ImageList1.Images.Add(MyIcon)

         ListView1.Items.Add("icon" & index.ToString, index)
         DestroyIcon(hIcon)
         index += 1
      Loop
   End Sub
End Class
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

ugin_95
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 19.07.2009 (Вс) 6:42

Re: Стандартные иконки для папок, дисков и файлов.

Сообщение ugin_95 » 15.11.2009 (Вс) 18:09

Спасибо!!!


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList