WPF에서 프로세스 아이콘 가져오는 방법을 배워보자.
1. Process.cs (모델)
public class Process
{
// 프로세스명
public string Name { get; set; }
// 아이콘
public ImageSource AppIcon { get; set; }
public Process(string path)
{
Name = Path.GetFileName(path);
AppIcon = GetAppIcon(path);
}
private ImageSource GetAppIcon(string path)
{
Icon icon = null;
ImageSource imageSource;
try
{
// 파일에 들어있는 이미지의 아이콘 반환
icon = Icon.ExtractAssociatedIcon(path);
}
catch
{
// 기본 응용 프로그램 아이콘
icon = SystemIcons.Application;
}
finally
{
// 아이콘 이미지에 대한 BitmapSource 반환
imageSource = Imaging.CreateBitmapSourceFromHIcon(
icon.Handle,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
return imageSource;
}
}
Icon.ExtractAssociatedIcon 메서드가 핵심이다.
매개변수의 경로가 올바르지 않은 경우 ArgumentException이 발생한다.
이 경우 기본 응용 프로그램 아이콘을 설정하도록 했다.
2. MainWindowVM.cs (뷰모델)
public class MainWindowVM
{
public ObservableCollection<Process> Processes { get; set; } = new ObservableCollection<Process>();
public MainWindowVM()
{
Processes.Add(new Process(@"C:\Program Files\Google\Chrome\Application\chrome.exe"));
Processes.Add(new Process(@"C:\NotFile.12"));
}
}
3. MainWindow.xaml (뷰)
<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTest"
mc:Ignorable="d"
Title="프로세스 아이콘" Height="450" Width="800">
<Window.DataContext>
<local:MainWindowVM/>
</Window.DataContext>
<Grid>
<ListView ItemsSource="{Binding Processes}">
<ListView.View>
<GridView>
<GridViewColumn Header="프로세스">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<!--아이콘-->
<Image Source="{Binding AppIcon}" Width="16" Height="16"/>
<!--프로세스명-->
<TextBlock Text="{Binding Name}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
</Window>
4. 실행결과
'WPF > 개발' 카테고리의 다른 글
WPF Title Bar Custom ContextMenu 생성하는 방법 (0) | 2024.09.02 |
---|---|
WPF ItemsControl HorizontalScrollBar 활성화 방법 (0) | 2024.08.12 |
WPF RadioButton Enum Binding 방법 (0) | 2024.05.16 |
WPF ListBox 아이템 간격 설정하는 방법 (0) | 2024.04.12 |
WPF Button Image Background 없애는 방법 (0) | 2024.04.04 |