Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

Как получить иконку папки?

Как получить иконку папки?
Например
Control Panel
Shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}


Ответ

Проще всего использовать Windows API Code Pack, чтобы не возиться с interop'ом и COM-объектами. Если у вас Visual Studio версии до 2017, вам нужно будет вручную подключить nuget-пакет Windows API Code Pack - Shell. (2017-ая студия найдёт и предложит подключить пакет сама, увидев незнакомый тип.)
Подключив пакет, мы сможем работать с типами ShellObject или ShellFolder. Для того, чтобы получить сам каталог, нам нужно написать, например,
(ShellFolder)ShellObject.FromParsingName("shell:::{4234d49b-0245-4df3-b780-3893943456e1}");
ShellFolder является списком своих подобъектов, поэтому перечислить подобъекты можно просто так:
var sf = (ShellFolder)ShellObject.FromParsingName( "shell:::{4234d49b-0245-4df3-b780-3893943456e1}"); Console.WriteLine(sf.Name); foreach (var item in sf) { Console.WriteLine(item.Name); ShellThumbnail t = item.Thumbnail; }
Иконка подкаталога содержится в объекте ShellThumbnail. Сам объект содержит иконки в различных форматах (icon, WPF System.Windows.Media.Imaging.BitmapSource и WinForms System.Drawing.Bitmap) и различных размерах. Для отображения нам понадобится графическое приложение. Я воспользуюсь более простым WPF.
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = ShellObject.FromParsingName( "shell:::{4234d49b-0245-4df3-b780-3893943456e1}"); } }


Результат:

Комментариев нет:

Отправить комментарий