/[RomCheater]/trunk/RomCheater.Core/ProcessIconEx.cs
ViewVC logotype

Annotation of /trunk/RomCheater.Core/ProcessIconEx.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 686 - (hide annotations) (download)
Mon Jun 17 09:31:52 2013 UTC (7 years, 5 months ago) by william
File size: 2302 byte(s)
+ massive move of source files

1 william 686 using System;
2     using System.Collections.Generic;
3     using System.Linq;
4     using System.Text;
5     using System.Runtime.InteropServices;
6     using System.Drawing;
7    
8     namespace RomCheater.Core
9     {
10     public class ProcessIconEx
11     {
12     [DllImport("Shell32", CharSet = CharSet.Auto)]
13     private static unsafe extern int ExtractIconEx(
14     string lpszFile,
15     int nIconIndex,
16     IntPtr[] phIconLarge,
17     IntPtr[] phIconSmall,
18     int nIcons);
19     [DllImport("user32.dll", EntryPoint = "DestroyIcon", SetLastError = true)]
20     private static unsafe extern int DestroyIcon(IntPtr hIcon);
21     public static Icon ExtractIConFromFile(string file, bool large)
22     {
23     unsafe
24     {
25     int readIconCount = 0;
26     IntPtr[] hDummy = new IntPtr[1] { IntPtr.Zero };
27     IntPtr[] hIconEx = new IntPtr[1] { IntPtr.Zero };
28    
29     try
30     {
31     if (large)
32     readIconCount = ExtractIconEx(file, 0, hIconEx, hDummy, 1);
33     else
34     readIconCount = ExtractIconEx(file, 0, hDummy, hIconEx, 1);
35    
36     if (readIconCount > 0 && hIconEx[0] != IntPtr.Zero)
37     {
38     // GET FIRST EXTRACTED ICON
39     Icon extractedIcon = (Icon)Icon.FromHandle(hIconEx[0]).Clone();
40    
41     return extractedIcon;
42     }
43     else // NO ICONS READ
44     return null;
45     }
46     catch (Exception ex)
47     {
48     /* EXTRACT ICON ERROR */
49    
50     // BUBBLE UP
51     throw new ApplicationException("Could not extract icon", ex);
52     }
53     finally
54     {
55     // RELEASE RESOURCES
56     foreach (IntPtr ptr in hIconEx)
57     if (ptr != IntPtr.Zero)
58     DestroyIcon(ptr);
59    
60     foreach (IntPtr ptr in hDummy)
61     if (ptr != IntPtr.Zero)
62     DestroyIcon(ptr);
63     }
64     }
65     }
66     }
67     }

  ViewVC Help
Powered by ViewVC 1.1.22