如何获取文件在系统中的图标?


public class SysIO2
{
    
public SysIO2()
    
{
    }

    
private const uint SHGFI_ICON = 0x100;
    
private const uint SHGFI_LARGEICON = 0x0;
    
private const uint SHGFI_SMALLICON = 0x1;
    
public const uint SHGFI_USEFILEATTRIBUTES = 0x10;


    [DllImport(
"kernel32.dll")]
    
internal static extern void ExitProcess(int a);

    [DllImport(
"shell32.dll")]
    
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref   SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);

    [StructLayout(LayoutKind.Sequential)]
    
private 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;
    }

    
/// <summary>
    
/// 获取指定文件(或者扩展名)和系统关联的小图标
    
/// </summary>
    
/// <param name="strExtension">文件名,或者文件扩展名(.bmp等等)</param>
    
/// <returns></returns>

    internal static Icon GetSmallIcon(string strExtension)
    
{
        
string strFileName = Path.GetExtension(strExtension);
        
if (strFileName == "")
        
{
            strFileName 
= strExtension;
        }

        IntPtr hImgSmall;
        SHFILEINFO shinfo 
= new SHFILEINFO();
        hImgSmall 
= SHGetFileInfo(strFileName, 0ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
        Icon myIcon 
= System.Drawing.Icon.FromHandle(shinfo.hIcon);
        
return myIcon;
    }

    
/// <summary>
    
/// 获取指定文件(或者扩展名)和系统关联的大图标
    
/// </summary>
    
/// <param name="strExtension">文件名,或者文件扩展名(.bmp等等)</param>
    
/// <returns></returns>

    internal static Icon GetLargeIcon(string strExtension)
    
{
        
string strFileName = Path.GetExtension(strExtension);
        
if (strFileName == "")
        
{
            strFileName 
= strExtension;
        }

        IntPtr hImgLarge;
        SHFILEINFO shinfo 
= new SHFILEINFO();
        hImgLarge 
= SHGetFileInfo(strFileName, 0ref shinfo, (uint)Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
        Icon myIcon 
= System.Drawing.Icon.FromHandle(shinfo.hIcon);
        
return myIcon;
    }

}
posted @ 2007-01-22 17:00  轮回  阅读(566)  评论(1编辑  收藏  举报