Este artigo passo a passo descreve como usar a função SHGetFileInfo para obter os ícones que são associados a arquivos.
Criar um aplicativo Windows Forms
Inicie o Microsoft Visual Studio NET..
No menu arquivo , aponte para novo e, em seguida, clique em Project .
Na caixa de diálogo New Project , clique em projetos do Visual translation from VPE for Csharp em Project Types e clique em Windows Application em modelos .
Na caixa nome , digite GetIconSample .
Use a função SHGetFileInfo
Adicione o código a seguir no arquivo Form1.cs no final de instruções USING .
using System.Runtime.InteropServices;
Adicione o seguinte código após a classe Form1 do namespace 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);
}
Adicione o seguinte código na classe Form1 após as instruções PRIVATE :
private int nIndex = 0;
Adicione um controle listView , um controle de botão e um controle imageList ao formulário. Os nomes padrão são listView1, button1 e imageList1 respectivamente.
Na janela Propriedades de button1 , defina o texto do botão para Selecionar um arquivo 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++);
}
Executar o projeto
Compilar o projeto: no menu Build , clique em Build Solution .
Pressione F5 para executar o projeto.
Clique em Selecionar um arquivo e selecione um arquivo na caixa de diálogo Abrir . O nome do arquivo e o ícone associado ao arquivo exibido no controle ListView .
Para obter mais informações em uma versão Microsoft Visual Basic .NET deste artigo, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
ID do artigo: 319350 - Última revisão: sexta-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 319350
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.