How can I reuse the application icon from within my application so I don't have to embedded it twice (once for the application icon and once for internal usage)?
+4
A:
You can read it back via P/Interop calls. It goes something like this:
static Icon GetAppIcon() {
var fileName = Assembly.GetEntryAssembly().Location
System.IntPtr hLibrary = NativeMethods.LoadLibrary(fileName);
if (!hLibrary.Equals(System.IntPtr.Zero)) {
System.IntPtr hIcon = NativeMethods.LoadIcon(hLibrary, "#32512");
if (!hIcon.Equals(System.IntPtr.Zero)) {
return Icon.FromHandle(hIcon);
}
}
return null; //no icon was retrieved
}
additionally, native signatures are:
private static class NativeMethods {
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
static extern internal IntPtr LoadIcon(IntPtr hInstance, string lpIconName);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
static extern internal IntPtr LoadLibrary(string lpFileName);
}
Josip Medved
2009-08-29 18:17:48
+4
A:
It seems easiest to use Icon.ExtractAssociatedIcon, as outlined in this related question: http://stackoverflow.com/questions/596837/avoiding-duplicate-icon-resources-in-a-net-c-project
bobbymcr
2009-08-29 18:25:12