知道文件扩展名,如何获得在系统中该文件类型的图标

-----------------------  
//  FAQ整理:ccrun(老妖)  
//  2005.11.30  
-----------------------  

请教:知道文件扩展名,如何获得在系统中该文件类型的图标?
---------------------------------------------------------------
1. 用SHGetFileInfo函数:
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));
DWORD Index = SHGetFileInfo("c://boot.ini",
        FILE_ATTRIBUTE_NORMAL,
        &sfi,
        sizeof(sfi),
        SHGFI_SYSICONINDEX | SHGFI_ICON);
if (sfi.hIcon != NULL)
{
    Image1->Picture->Icon->Handle = sfi.hIcon;
}


2. 查注册表:
比如查找.ini文件的图标:
HKEY_CLASSES_ROOT/inifile/DefaultIcon
%SystemRoot%/System32/shell32.dll,-151


3. 用ExtractAssociatedIcon函数:
HICON GetIconByExt(AnsiString FileExt)
{
    bool Exists;
    WORD wIndex;
    HICON hIcon;
    AnsiString file;

    file = AnsiString("C://test.") + FileExt;
    Exists = FileExists(file);
    if(!Exists)
        FileClose(FileCreate(file));
    hIcon = ExtractAssociatedIcon((HINSTANCE)HInstance, file.c_str(), &wIndex);
    if(!Exists)
        DeleteFile(file);
    return hIcon;
}  

SHGetFileInfo、ExtractAssociatedIcon等函数好象不能返回不存在的文件的图标.   (如果根据不同的扩展名创建一个假文件,   获取图标后又删除,   未免太不专业了吧)能不能根据扩展名取得相关图标?   或其它方式?请专家指点该如何去做到?    
  回答:    
   
          SHGetFileInfo可以按文件类型取图标,如:    
            SHFILEINFO   sfi;    
            HIMAGELIST   hil;    
             
            ZeroMemory(&sfi,sizeof(sfi));    
            hil   =   SHGetFileInfo(".zip",    
            FILE_ATTRIBUTE_NORMAL,    
            &sfi,    
            sizeof(sfi),    
            SHGFI_USEFILEATTRIBUTES|SHGFI_ICON);    
  取得本身程序所在目录  
  ExtractFilePath(Application->ExeName)   先用GetModuleFileName()获得程序的全路径,再用AfxGetApp()->m_pszExeName获得程序名   
    
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值