본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF & C# - 아이콘 추출 ( icon )

728x90
반응형


 WPF & C# - 아이콘 추출 ( icon / ExtractAssociatedIcon )



아이콘 추출 함수


MainWindow.xaml.cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 아이콘 추출 함수
private ImageSource ExtractAssociatedIcon(string fileNmae)
{
    // 참고 : https://www.c-sharpcorner.com/uploadfile/dpatra/get-icon-from-filename-in-wpf/
    System.Windows.Media.ImageSource icon;
    using (System.Drawing.Icon sysicon = System.Drawing.Icon.ExtractAssociatedIcon(fileNmae))
    {
        icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
            sysicon.Handle,
            System.Windows.Int32Rect.Empty,
            System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    }
    return icon;
}
 
cs


위 방법 보다 더 큰 이미지를 추출할 수 있는 방법이 있을꺼 같은데, 아직은 잘 모르겠다. ㅠㅠ








응용프로그램 드락하여 아이콘 추출 후 프로그램 실행




1. 프로그램 드랍하여 아이콘 추출
2. 아이콘 클릭 시 프로그램 실행


MainWindow.xaml.cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 파일 드랍시 작업
private void grid_Drop(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
        foreach (string file in files)
        {
            ImageSource icon = ExtractAssociatedIcon(file);   // 아이콘 추출
 
            // Image 생성 및 아이콘넣기
            System.Windows.Controls.Image img = new System.Windows.Controls.Image();
            img.Source = ExtractAssociatedIcon(file);
            img.Width = icon.Width;
            img.Height = icon.Height;
            img.Tag = file;
 
            // Image 이벤트 등록
            img.MouseLeftButtonDown += (s, a) =>
            {
                System.Diagnostics.Process.Start(img.Tag.ToString());
            };
            wrp.Children.Add(img);
        }
    }
}
 
// 아이콘 추출 함수
private ImageSource ExtractAssociatedIcon(string fileNmae)
{
    // 참고 : https://www.c-sharpcorner.com/uploadfile/dpatra/get-icon-from-filename-in-wpf/
    System.Windows.Media.ImageSource icon;
    using (System.Drawing.Icon sysicon = System.Drawing.Icon.ExtractAssociatedIcon(fileNmae))
    {
        icon = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
            sysicon.Handle,
            System.Windows.Int32Rect.Empty,
            System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    }
    return icon;
}
cs





728x90
반응형