code211218 Asked:2020-05-28 22:52:04 +0800 CST2020-05-28 22:52:04 +0800 CST 2020-05-28 22:52:04 +0800 CST 如何获取文件夹图标? 772 如何获取文件夹图标? 例如 控制面板 Shell:::{5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0} c# 1 个回答 Voted Best Answer VladD 2020-05-29T20:22:01+08:002020-05-29T20:22:01+08:00 最简单的方法是使用 Windows API 代码包,这样您就不会乱用互操作和 COM 对象。如果您拥有 2017 年之前的 Visual Studio 版本,则需要手动包含Windows API 代码包 - Shell nuget 包。(2017年的工作室会发现并提供连接包本身,看到一个不熟悉的类型。) 通过包含包,我们可以使用ShellObjector 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. 对象本身包含各种格式(图标、WPFSystem.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> 结果:
最简单的方法是使用 Windows API 代码包,这样您就不会乱用互操作和 COM 对象。如果您拥有 2017 年之前的 Visual Studio 版本,则需要手动包含Windows API 代码包 - Shell nuget 包。(2017年的工作室会发现并提供连接包本身,看到一个不熟悉的类型。)
通过包含包,我们可以使用
ShellObject
orShellFolder
。为了获取目录本身,我们需要编写,例如,ShellFolder
是其子对象的列表,因此您可以像这样简单地枚举子对象:子目录图标包含在一个
ShellThumbnail
. 对象本身包含各种格式(图标、WPFSystem.Windows.Media.Imaging.BitmapSource
和 WinFormsSystem.Drawing.Bitmap
)和各种大小的图标。要显示,我们需要一个图形应用程序。我将使用更简单的 WPF。结果: