Recuperare un'icona da un eseguibile utilizzando PInvoke

Scritto da  Massimo Bonanni il lunedì 14 marzo 2011  •  Linguaggio: C#,VB   • Livello: 100


Se vogliamo recuperare un'icona da un eseguibile (anche non .NET) possiamo utilizzare una API presente nella dll shell32.dll.
Il seguente metodo esegue esattamente questo:

VB.NET

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

Public Shared Function ExtractIconFromFile(ByVal FileName As String, _
                                           ByVal Index As Integer) As Icon
    Dim tmpIcon As System.Drawing.Icon = Nothing
    Dim iHandle As IntPtr
    iHandle = ExtractIcon(IntPtr.Zero, FileName, Index)
    If iHandle <> IntPtr.Zero Then
         tmpIcon = System.Drawing.Icon.FromHandle(iHandle)
    End If
    Return tmpIcon
End Function

 

C#

[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);
 
public static Icon ExtractIconFromFile(String FileName, Int32 Index)
{
    Icon tmpIcon = null;
    IntPtr iHandle;
    iHandle = ExtractIcon(IntPtr.Zero, FileName, Index);
    if (iHandle != IntPtr.Zero)
        tmpIcon = System.Drawing.Icon.FromHandle(iHandle);
    return tmpIcon;
}


In entrambi i linguaggi va importato il namespace System.Runtime.InteropServices.


Tags: 

 
x