Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than shell32, prefix the name with the module name and a period.
ExtractIconEx (shell32)
.
Summary
C# Signature:
[DllImport("shell32.dll", CharSet=CharSet.Auto)]
static extern uint ExtractIconEx(string szFileName, int nIconIndex,
IntPtr[] phiconLarge, IntPtr[] phiconSmall, uint nIcons);
User-Defined Types:
None.
Notes:
None.
Tips & Tricks:
Please add some!
Sample Code:
namespace Martin.Hyldahl.Examples.ExtractIconEx
{
/*
* Example using ExtractIconEx
* Created by Martin Hyldahl (alanadin@post8.tele.dk)
*/
using System;
using System.Drawing;
using System.Runtime.InteropServices;
/// <summary>
/// Example using ExtractIconEx
/// </summary>
public 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);
}
}
}
}
}
Alternative Managed API:
Do you know one? Please contribute it!
Documentation
The ExtractIconEx API
3/8/2013 12:41:54 PM - -218.224.236.114
Please edit this page!
Do you have...
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).