根据文件名或文件扩展名获取文件的默认图标
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace findIconWithPathFile
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string xx = null;
private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(xx) == true)
{
using (OpenFileDialog dlg = new OpenFileDialog())
{
dlg.CheckFileExists = true;
dlg.CheckPathExists = true;
dlg.Filter = "所有文件(*.*)|*.*";
if (dlg.ShowDialog(this) == System.Windows.Forms.DialogResult.OK)
{
xx = dlg.FileName;
}
}
//Icon icon= getIcon(xx ,true);
Icon icon = getIcon1(xx);
pictureBox1.Image = icon.ToBitmap();
}
}
[DllImport("shell32.dll")]
public extern static uint ExtractIconEx(string lpszFile, int nIconIndex, int[] phiconLarge, int[] phiconSmall, uint nIcons);
public Icon getIcon(string pathxx, bool large)
{
int[] phiconLarge = new int[1];
int[] phiconSmall = new int[1];
ExtractIconEx(pathxx, 0, phiconLarge, phiconSmall, 1);
IntPtr handle = new IntPtr(large ? phiconLarge[0] : phiconSmall[0]);
Icon icon = Icon.FromHandle(handle);
return icon;
}
public Icon getIcon1(string pathxx)
{
Icon icon = Icon.ExtractAssociatedIcon(pathxx);
return icon;
}
}
}
namespaceMyNamespace
{
publicclassFileIcon
{
///<summary>
///获取文件的默认图标
///</summary>
///<paramname="fileName">文件名。
///可以只是文件名,甚至只是文件的扩展名(.*);
///如果想获得.ICO文件所表示的图标,则必须是文件的完整路径。
///</param>
///<paramname="largeIcon">是否大图标</param>
///<returns>文件的默认图标</returns>
publicstaticIconGetFileIcon(stringfileName,boollargeIcon)
{
SHFILEINFOinfo=newSHFILEINFO(true);
intcbFileInfo=Marshal.SizeOf(info);
SHGFIflags;
if(largeIcon)
flags=SHGFI.Icon|SHGFI.LargeIcon|SHGFI.UseFileAttributes;
else
flags=SHGFI.Icon|SHGFI.SmallIcon|SHGFI.UseFileAttributes;
SHGetFileInfo(fileName,256,outinfo,(uint)cbFileInfo,flags);
returnIcon.FromHandle(info.hIcon);
}
[DllImport("Shell32.dll")]
privatestaticexternintSHGetFileInfo
(
stringpszPath,
uintdwFileAttributes,
outSHFILEINFOpsfi,
uintcbfileInfo,
SHGFIuFlags
);
[StructLayout(LayoutKind.Sequential)]
privatestructSHFILEINFO
{
publicSHFILEINFO(boolb)
{
hIcon=IntPtr.Zero;iIcon=0;dwAttributes=0;szDisplayName="";szTypeName="";
}
publicIntPtrhIcon;
publicintiIcon;
publicuintdwAttributes;
[MarshalAs(UnmanagedType.LPStr,SizeConst=260)]
publicstringszDisplayName;
[MarshalAs(UnmanagedType.LPStr,SizeConst=80)]
publicstringszTypeName;
};
privateenumSHGFI
{
SmallIcon=0x00000001,
LargeIcon=0x00000000,
Icon=0x00000100,
DisplayName=0x00000200,
Typename=0x00000400,
SysIconIndex=0x00004000,
UseFileAttributes=0x00000010
}
}
}