Cómo utilizar la función SHGetFileInfo para obtener los iconos que están asociados con archivos en Visual C# .NET

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 319350
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Resumen
En este artículo paso a paso describe cómo utilizar la función SHGetFileInfo para obtener los iconos asociados con los archivos.

back to the top

Crear una aplicación de Windows Forms

  1. Inicie Microsoft Visual Studio NET..
  2. En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
  3. En el cuadro de diálogo Nuevo proyecto , haga clic en Proyectos de Visual C# en Tipos de proyecto y, después, haga clic en Aplicación para Windows en plantillas .
  4. En el cuadro nombre , escriba GetIconSample .
back to the top

Utilice la función SHGetFileInfo

  1. Agregue el código siguiente en el archivo Form1.cs al final de las declaraciones USING .
    using System.Runtime.InteropServices;					
  2. Agregue el código siguiente después de la clase Form1 del espacio de nombres GetIconSample .
    [StructLayout(LayoutKind.Sequential)]public struct SHFILEINFO {	public IntPtr hIcon;	public IntPtr iIcon;	public uint dwAttributes;	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]	public string szDisplayName;	[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]	public string szTypeName;};class Win32{	public const uint SHGFI_ICON = 0x100;	public const uint SHGFI_LARGEICON = 0x0; // 'Large icon	public const uint SHGFI_SMALLICON = 0x1; // 'Small icon			[DllImport("shell32.dll")]	public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);}					
  3. Agregue el código siguiente en la clase Form1 después las instrucciones PRIVATE :
    private int nIndex = 0;					
  4. Agregue un control de lista , un control de botón y un control imageList al formulario. Los nombres predeterminados son listView1, button1 y imageList1.
  5. En la ventana Propiedades de button1 , establezca el texto del botón para Seleccionar un archivo y, a continuación, agregue el código siguiente en el evento button1_click :
    IntPtr hImgSmall; //the handle to the system image listIntPtr hImgLarge; //the handle to the system image liststring fName; //  'the file name to get icon fromSHFILEINFO shinfo = new SHFILEINFO();   OpenFileDialog openFileDialog1 = new OpenFileDialog();openFileDialog1.InitialDirectory = "c:\\temp\\";openFileDialog1.Filter = "All files (*.*)|*.*";openFileDialog1.FilterIndex = 2;openFileDialog1.RestoreDirectory = true ;listView1.SmallImageList = imageList1;listView1.LargeImageList = imageList1;			if(openFileDialog1.ShowDialog() == DialogResult.OK) {     fName = openFileDialog1.FileName;     //Use this to get the small Icon     hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo,(uint)Marshal.SizeOf(shinfo),Win32.SHGFI_ICON |Win32.SHGFI_SMALLICON);    //Use this to get the large Icon    //hImgLarge = SHGetFileInfo(fName, 0,     //	ref shinfo, (uint)Marshal.SizeOf(shinfo),     //	Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);    //The icon is returned in the hIcon member of the shinfo struct    System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);				    imageList1.Images.Add(myIcon);				    //Add file name and icon to listview    listView1.Items.Add(fName, nIndex++); }					
back to the top

Ejecute el proyecto

  1. Compilar el proyecto: en el menú Generar , haga clic en Generar solución .
  2. Presione F5 para ejecutar el proyecto.
  3. Haga clic en Seleccionar un archivo y, a continuación, seleccione un archivo en el cuadro de diálogo Abrir . El nombre del archivo y el icono que está asociado con el archivo aparecerá en el control ListView .
back to the top
Referencias
Para obtener más información en una versión de Microsoft Visual Basic .NET de este artículo, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
319340Cómo utilizar la función SHGetFileInfo para obtener los iconos que están asociados con archivos en Visual Basic.NET
back to the top

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 319350 - Última revisión: 12/07/2015 09:15:49 - Revisión: 2.3

Microsoft Visual Studio .NET 2003 Professional, Microsoft Visual Studio .NET 2003 Enterprise Architect, Microsoft Visual Studio .NET 2003 Enterprise Developer, Microsoft Visual Studio .NET 2003 Academic Edition, Microsoft Visual Studio .NET 2002 Professional, Microsoft Visual Studio .NET 2002 Enterprise Architect, Microsoft Visual Studio .NET 2002 Enterprise Developer, Microsoft Visual Studio .NET 2002 Academic Edition

  • kbnosurvey kbarchive kbmt kbhowtomaster KB319350 KbMtes
Comentarios
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)