Страницы

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

пятница, 6 марта 2020 г.

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

#c_sharp


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

Например

Control Panel

Shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}

    


Ответы

Ответ 1



Проще всего использовать 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}"); } } Результат:

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

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