Como utilizar a função SHGetFileInfo para obter os ícones associados aos ficheiros no Visual C# .NET

Traduções de Artigos Traduções de Artigos
Artigo: 319350 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve como utilizar a função SHGetFileInfo para obter os ícones que estejam associados a ficheiros.

Criar uma aplicação Windows Forms

  1. Inicie o Microsoft Visual Studio NET..
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
  3. Na caixa de diálogo Novo projecto , clique em Visual C# Projects em Project Types e, em seguida, clique em Aplicação do Windows em modelos .
  4. Na caixa nome , escreva GetIconSample .

Utilize a função SHGetFileInfo

  1. Adicione o código seguinte no ficheiro de Form1.cs no fim da instruções USING .
    using System.Runtime.InteropServices;
    					
  2. Adicione o seguinte código depois da classe Form1 do espaço de nomes 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. Adicione o seguinte código na classe Form1 depois as instruções PRIVATE :
    private int nIndex = 0;
    					
  4. Adicione um controlo de lista Vista , um controlo de botão e um controlo imageList ao formulário. Os nomes predefinidos são listView1, button1 e imageList1 respectivamente.
  5. Na janela Propriedades do button1 , defina o texto do botão para Seleccionar um ficheiro e, em seguida, adicione o seguinte código no evento button1_click :
    IntPtr hImgSmall; //the handle to the system image list
    IntPtr hImgLarge; //the handle to the system image list
    string fName; //  'the file name to get icon from
    SHFILEINFO 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++); 
    }
    					

Execute o projecto

  1. Compilar o projecto: no menu criar , clique em Criar soluções .
  2. Prima F5 para executar o projecto.
  3. Clique em Seleccionar um ficheiro e, em seguida, seleccione um ficheiro na caixa de diálogo Abrir . O nome do ficheiro e o ícone associado ao ficheiro apresentado no controlo ListView .

Referências

Para mais informações numa Microsoft Visual Basic .NET versão deste artigo, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
319340Como utilizar a função SHGetFileInfo para obter os ícones associados aos ficheiros no Visual Basic .NET

Propriedades

Artigo: 319350 - Última revisão: 22 de setembro de 2006 - Revisão: 2.3
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • 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 Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
Palavras-chave: 
kbmt kbhowtomaster KB319350 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 319350

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com