markus / SmartUpdate / IconManager.cs @ f65e6c02
이력 | 보기 | 이력해설 | 다운로드 (3.19 KB)
1 | c4a4d59c | ljiyeon | using System; |
---|---|---|---|
2 | using System.Collections.Generic; |
||
3 | using System.Linq; |
||
4 | using System.Text; |
||
5 | using System.Drawing; |
||
6 | using System.Runtime.InteropServices; |
||
7 | using System.Windows.Media; |
||
8 | using System.Windows; |
||
9 | using System.Windows.Media.Imaging; |
||
10 | |||
11 | public class IconManager |
||
12 | { |
||
13 | public static ImageSource GetIcon(string path, bool smallIcon, bool isDirectory) |
||
14 | { |
||
15 | uint flags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES; |
||
16 | if (smallIcon) |
||
17 | flags |= SHGFI_SMALLICON; |
||
18 | |||
19 | uint attributes = FILE_ATTRIBUTE_NORMAL; |
||
20 | if (isDirectory) |
||
21 | attributes |= FILE_ATTRIBUTE_DIRECTORY; |
||
22 | |||
23 | SHFILEINFO shfi; |
||
24 | if (0 != SHGetFileInfo(path, attributes, out shfi, (uint)Marshal.SizeOf(typeof(SHFILEINFO)), flags)) |
||
25 | { |
||
26 | return System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(shfi.hIcon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); |
||
27 | } |
||
28 | return null; |
||
29 | } |
||
30 | |||
31 | [StructLayout(LayoutKind.Sequential)] |
||
32 | private struct SHFILEINFO |
||
33 | { |
||
34 | public IntPtr hIcon; |
||
35 | public int iIcon; |
||
36 | public uint dwAttributes; |
||
37 | [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] |
||
38 | public string szDisplayName; |
||
39 | [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] |
||
40 | public string szTypeName; |
||
41 | } |
||
42 | |||
43 | [DllImport("shell32")] |
||
44 | private static extern int SHGetFileInfo(string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbFileInfo, uint flags); |
||
45 | |||
46 | private const uint FILE_ATTRIBUTE_READONLY = 0x00000001; |
||
47 | private const uint FILE_ATTRIBUTE_HIDDEN = 0x00000002; |
||
48 | private const uint FILE_ATTRIBUTE_SYSTEM = 0x00000004; |
||
49 | private const uint FILE_ATTRIBUTE_DIRECTORY = 0x00000010; |
||
50 | private const uint FILE_ATTRIBUTE_ARCHIVE = 0x00000020; |
||
51 | private const uint FILE_ATTRIBUTE_DEVICE = 0x00000040; |
||
52 | private const uint FILE_ATTRIBUTE_NORMAL = 0x00000080; |
||
53 | private const uint FILE_ATTRIBUTE_TEMPORARY = 0x00000100; |
||
54 | private const uint FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200; |
||
55 | private const uint FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400; |
||
56 | private const uint FILE_ATTRIBUTE_COMPRESSED = 0x00000800; |
||
57 | private const uint FILE_ATTRIBUTE_OFFLINE = 0x00001000; |
||
58 | private const uint FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000; |
||
59 | private const uint FILE_ATTRIBUTE_ENCRYPTED = 0x00004000; |
||
60 | private const uint FILE_ATTRIBUTE_VIRTUAL = 0x00010000; |
||
61 | |||
62 | private const uint SHGFI_ICON = 0x000000100; |
||
63 | private const uint SHGFI_DISPLAYNAME = 0x000000200; |
||
64 | private const uint SHGFI_TYPENAME = 0x000000400; |
||
65 | private const uint SHGFI_ATTRIBUTES = 0x000000800; |
||
66 | private const uint SHGFI_ICONLOCATION = 0x000001000; |
||
67 | private const uint SHGFI_EXETYPE = 0x000002000; |
||
68 | private const uint SHGFI_SYSICONINDEX = 0x000004000; |
||
69 | private const uint SHGFI_LINKOVERLAY = 0x000008000; |
||
70 | private const uint SHGFI_SELECTED = 0x000010000; |
||
71 | private const uint SHGFI_ATTR_SPECIFIED = 0x000020000; |
||
72 | private const uint SHGFI_LARGEICON = 0x000000000; |
||
73 | private const uint SHGFI_SMALLICON = 0x000000001; |
||
74 | private const uint SHGFI_OPENICON = 0x000000002; |
||
75 | private const uint SHGFI_SHELLICONSIZE = 0x000000004; |
||
76 | private const uint SHGFI_PIDL = 0x000000008; |
||
77 | private const uint SHGFI_USEFILEATTRIBUTES = 0x000000010; |
||
78 | } |