获取文件图标

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.IO;
public class FileIcon{
/// <summary>
/// Get default icon from file
/// </summary>
/// <param name="fileName">File name
/// </param>
/// <param name="largeIcon">Large icon or not</param>
/// <returns>default icon</returns>
public static Icon GetFileIcon(string fileName, bool largeIcon) {
SHFILEINFO info
= new SHFILEINFO(true);
int cbFileInfo = Marshal.SizeOf(info);
SHGFI flags;
if (largeIcon)
flags
= SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes;
else
flags
= SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;

SHGetFileInfo(fileName,
256, out info, (uint)cbFileInfo, flags);
return Icon.FromHandle(info.hIcon);
}


[DllImport(
"Shell32.dll")]
private static extern int SHGetFileInfo
(
string pszPath,
uint dwFileAttributes,
out SHFILEINFO psfi,
uint cbfileInfo,
SHGFI uFlags
);

[StructLayout(LayoutKind.Sequential)]
private struct SHFILEINFO {
public SHFILEINFO(bool b){
hIcon
= IntPtr.Zero; iIcon = 0; dwAttributes = 0; szDisplayName = ""; szTypeName = "";
}
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.LPStr, SizeConst
= 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.LPStr, SizeConst
= 80)]
public string szTypeName;
};

private enum SHGFI s{
SmallIcon
= 0x00000001,
LargeIcon
= 0x00000000,
Icon
= 0x00000100,
DisplayName
= 0x00000200,
Typename
= 0x00000400,
SysIconIndex
= 0x00004000,
UseFileAttributes
= 0x00000010
}
}

  

posted @ 2011-07-18 21:31  勇者无畏  阅读(261)  评论(0)    收藏  举报