extracticon (shell32)
Last changed: 96.28.120.65

.
Summary

C# Signature:

[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);

VB.NET Signature:

<DllImport("shell32.dll")> _
Private Shared Function ExtractIcon(ByVal hInst As IntPtr, ByVal lpszExeFileName As String, ByVal nIconIndex As Integer) As IntPtr
End Function

User-Defined Types:

None.

Notes:

Even though the Win32 function signature declares the third parameter as UINT nIconIndex, in .NET it must be a signed integer. This is because UINT is actually an alias for the int data type. Also, ExtractIcon() accepts -1 (an invalid value for unsigned integers) as an icon index, which will return the total number of icons in the specified file.

Tips & Tricks:

Please add some!

C# Sample Code:

string fileName = "C:\\Test.txt";
IntPtr hIcon = ExtractIcon(IntPtr.Zero, filename, 0);
System.Drawing.Icon MyIcon = System.Drawing.Icon.FromHandle(hIcon);
pictureBox1.Image = MyIcon.ToBitmap();

VB.NET Sample Code:

Dim fileName As String = "C:\Test.txt"
Dim hIcon As IntPtr =  ExtractIcon(IntPtr.Zero, filename, 0)
Dim MyIcon As System.Drawing.Icon = System.Drawing.Icon.FromHandle(hIcon)
pictureBox1.Image = MyIcon.ToBitmap()

Alternative Managed API:

System.Drawing.Icon.ExtractAssociatedIcon(fileName);

Documentation
ExtractIcon on MSDN