sábado, 21 de agosto de 2010

Obtener Icono de Aplicación Mediante Path o Ruta de Ejecutable

Una forma de obtener el ícono de una applicación es mediante el path o ruta de ejecutable de la aplicación, llamando a la función ExtractIconEx la cual se encuentra en la librería shell32.dll.
Dicha función obtiene el handle del ícono de una aplicación mediante la ruta de su ejecutable.La firma de la función ExtractIconEx es :


UINT WINAPI ExtractIconEx(
__in LPCTSTR lpszFile,
__in int nIconIndex,
__out_opt HICON *phiconLarge,
__out_opt HICON *phiconSmall,
__in UINT nIcons
);


//Para obtener un solo ícono
[DllImport("shell32.dll", CharSet=CharSet.Auto)]
internal static extern int ExtractIconEx(string stExeFileName, int nIconIndex, ref IntPtr phiconLarge, ref IntPtr phiconSmall, int nIcons);

//Para obtener un array de íconos
[DllImport("shell32.dll", CharSet=CharSet.Auto)]
internal static extern int ExtractIconEx(string stExeFileName, int nIconIndex, IntPtr[] phiconLarge, IntPtr[] phiconSmall, int nIcons);



Donde:
- lpszFile: indica el path del ejecutable de la aplicación.
-nIconIndex : Índice del icono a obtener.Si es cero se obtendrá el primer ícono
-*phiconLarge : un Array de handles dónde serán almacenados los iconos extraídos.También puede ser un solo handle.Si es null ningun ícono 'large' será extraído.
-*phiconSmall : un Array de handles dónde serán almacenados los iconos extraídos.También puede ser un solo handle.Si es null ningun ícono 'small' será extraído.
-nIcons :Número de íconos a ser extraídos.

En un post anterior ya se ha visto cómo recuperar la ruta o path del ejecutable de una aplicación mediante el Handle de ventana. A continuación muestro un método que retorna el handle del Icono de la aplicación:


private static IntPtr GetHicon(string exePath)
{
//sólo obtendré el largeIcon
IntPtr largeIcon = IntPtr.Zero;
IntPtr smallIcon = IntPtr.Zero;
ExtractIconExA(exePath, 0, ref largeIcon, ref smallIcon, 1);

DestroyIcon(smallIcon);

return largeIcon;
}



Captura:

Bajar solución completa AQUÍ.(VS2008/WPF)

No hay comentarios:

Publicar un comentario