Как получить иконку папки?
Например
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}");
}
}
<Window x:Class="ShellReaderWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="{Binding Name}" Height="350" Width="525">
<Grid>
<ListView ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Image Source="{Binding Thumbnail.MediumBitmapSource}"/>
<TextBlock Text="{Binding Name}" Grid.Column="1"
VerticalAlignment="Center" FontSize="24" Padding="10"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
Результат:
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники