得到给定扩展名的文件图标

原文:

地址:http://www.flawlesscode.com/post/2008/02/Getting-the-icon-for-a-given-file-extension.aspx

代码下载:http://www.flawlesscode.com/file.axd?file=IconUtils.zip

主要代码:

 

using  System;
using  System.Drawing;
using  System.Runtime.InteropServices;

namespace  FlawlessCode.IconUtils
{
    
public   static   class  IconUtils
    {
        
///   <summary>
        
///  Used to access system folder icons.
        
///   </summary>
        
///   <param name="largeIcon"> Specify large or small icons. </param>
        
///   <param name="openFolder"> Specify open or closed FolderType. </param>
        
///   <returns> The requested Icon. </returns>
         public   static  Icon GetIconForFolder(Boolean largeIcon, Boolean openFolder)
        {
            SHFILEINFO shellFileInfo 
=   new  SHFILEINFO();
            
try
            {
                
uint  flags  =  SHGFI_ICON  |  SHGFI_USEFILEATTRIBUTES;
                flags 
|=  openFolder  ?  SHGFI_OPENICON :  0 ;
                flags 
|=  largeIcon  ?  SHGFI_LARGEICON : SHGFI_SMALLICON;

                SHGetFileInfo(
null ,
                    FILE_ATTRIBUTE_DIRECTORY,
                    
ref  shellFileInfo,
                    (
uint )Marshal.SizeOf(shellFileInfo),
                    flags);

                
return  (Icon)Icon.FromHandle(shellFileInfo.hIcon).Clone();
            }
            
finally
            {
                DestroyIcon(shellFileInfo.hIcon);        
//  Cleanup
            }
        }

        
///   <summary>
        
///  Used to access file icons for a given extension.
        
///   </summary>
        
///   <param name="extension"> The file extension to get the icon for. </param>
        
///   <param name="largeIcon"> Specify large or small icons. </param>
        
///   <param name="linkOverlay"> Specify link overlay on the icon. </param>
        
///   <returns> The requested Icon </returns>
         public   static  Icon GetIconForFileExtension(String extension, Boolean largeIcon, Boolean linkOverlay)
        {
            
if  ( ! extension.StartsWith( " . " ))
                extension 
=   " . "   +  extension;

            SHFILEINFO shellFileInfo 
=   new  SHFILEINFO();
            
try
            {
                
uint  flags  =  SHGFI_ICON  |  SHGFI_USEFILEATTRIBUTES;
                flags 
|=  linkOverlay  ?  SHGFI_LINKOVERLAY :  0 ;
                flags 
|=  largeIcon  ?  SHGFI_LARGEICON : SHGFI_SMALLICON;

                SHGetFileInfo(extension,
                    FILE_ATTRIBUTE_NORMAL,
                    
ref  shellFileInfo,
                    (
uint )Marshal.SizeOf(shellFileInfo),
                    flags);

                
return  (Icon)Icon.FromHandle(shellFileInfo.hIcon).Clone();
            }
            
finally
            {
                DestroyIcon(shellFileInfo.hIcon);
            }
        }

        
#region  P/Invoke
        
private   const   int  MAX_PATH  =   256 ;
        
        
private   const   uint  SHGFI_ICON  =   0x000000100 ;
        
private   const   uint  SHGFI_LINKOVERLAY  =   0x000008000 ;
        
private   const   uint  SHGFI_LARGEICON  =   0x000000000 ;
        
private   const   uint  SHGFI_SMALLICON  =   0x000000001 ;
        
private   const   uint  SHGFI_OPENICON  =   0x000000002 ;
        
private   const   uint  SHGFI_USEFILEATTRIBUTES  =   0x000000010 ;

        
private   const   uint  FILE_ATTRIBUTE_DIRECTORY  =   0x00000010 ;
        
private   const   uint  FILE_ATTRIBUTE_NORMAL  =   0x00000080 ;

        [StructLayout(LayoutKind.Sequential)]
        
private   struct  SHFILEINFO
        {
            
public   const   int  NAMESIZE  =   80 ;
            
public  IntPtr hIcon;
            
public   int  iIcon;
            
public   uint  dwAttributes;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst 
=  MAX_PATH)]
            
public   string  szDisplayName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst 
=  NAMESIZE)]
            
public   string  szTypeName;
        };

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

        [DllImport(
" User32.dll " )]
        
private   static   extern   int  DestroyIcon(IntPtr hIcon);
        
#endregion
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值