Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Question
Saturday, January 1, 2011 9:07 AM
Ive traced the default file icon back to the dll where the images are stored (small and large), however, how do i read the dll to get the inside images?
An example dll is: C:\Windows\system32\imageres.dll (notepad, has an id of 102, dunno if that is relevent)
Ive been looking at ExtractIcon (in Shell32.dll), but i dont know how to use it (all forum posts are on visual basic):
http://msdn.microsoft.com/en-us/library/ms648068(v=vs.85).aspx
All replies (2)
Saturday, January 1, 2011 9:54 AM ✅Answered
So different is the VB code in this thread from C#
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/ed0ec792-911b-4ed0-ac63-e24c1f95f95b
Free snippet converter
http://www.tangiblesoftwaresolutions.com/
Success
Cor
Tuesday, January 4, 2011 8:37 AM ✅Answered | 2 votes
Hi Fatal Berserker,
Welcome to MSDN Forums!
We can use the following sample code to extract the icon from the dll file.
And you will need to add the "/unsafe" option when you compile this code file.
using System;
using System.Drawing;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication1
{
class ExtractIconExample
{
/* CONSTRUCTORS */
static ExtractIconExample()
{
}
// HIDE INSTANCE CONSTRUCTOR
private ExtractIconExample()
{
}
[DllImport("Shell32", CharSet = CharSet.Auto)]
private static unsafe extern int ExtractIconEx(
string lpszFile,
int nIconIndex,
IntPtr[] phIconLarge,
IntPtr[] phIconSmall,
int nIcons);
[DllImport("user32.dll", EntryPoint = "DestroyIcon", SetLastError = true)]
private static unsafe extern int DestroyIcon(IntPtr hIcon);
public static Icon ExtractIconFromExe(string file, bool large)
{
unsafe
{
int readIconCount = 0;
IntPtr[] hDummy = new IntPtr[1] { IntPtr.Zero };
IntPtr[] hIconEx = new IntPtr[1] { IntPtr.Zero };
try
{
if (large)
readIconCount = ExtractIconEx(file, 0, hIconEx, hDummy, 1);
else
readIconCount = ExtractIconEx(file, 0, hDummy, hIconEx, 1);
if (readIconCount > 0 && hIconEx[0] != IntPtr.Zero)
{
// GET FIRST EXTRACTED ICON
Icon extractedIcon = (Icon)Icon.FromHandle(hIconEx[0]).Clone();
return extractedIcon;
}
else // NO ICONS READ
return null;
}
catch (Exception ex)
{
/* EXTRACT ICON ERROR */
// BUBBLE UP
throw new ApplicationException("Could not extract icon", ex);
}
finally
{
// RELEASE RESOURCES
foreach (IntPtr ptr in hIconEx)
if (ptr != IntPtr.Zero)
DestroyIcon(ptr);
foreach (IntPtr ptr in hDummy)
if (ptr != IntPtr.Zero)
DestroyIcon(ptr);
}
}
}
}
}
If there's any concern, please feel free to let me know.
Have a nice day!
Mike [MSFT]
MSDN Community Support | Feedback to us
Get or Request Code Sample from Microsoft
Please remember to mark the replies as answers if they help and unmark them if they provide no help.