呵呵呵,Firing_Sky 用delphi刚刚作了一个你可以找他 

解决方案 »

  1.   

    好像叫IconKooK,在www.csdn.net/match有
      

  2.   

    我正好做了一个,不过功能不太完美!但要取任何执行文件[*.EXE;*.DLL]倒是没有任何问题!
    若需要,请回复我!
      

  3.   

    提供一个思路:
     取得扩展名:extractfileext();
     取得关联图标:ExtractAssociatedIcon()
     提取一个文件里面的图标:ExtractIcon() or ExtractIconEx()
    要读取所有的系统已经注册的文件类型,只要搜索注册表中HKEY_CLASS_ROOT下所有以.开头的主键即可!
     
      

  4.   

    实在有点失敬,原来Firing_Sky是斑竹,原谅我的大意!我会请Firing_Sky帮忙的,也谢谢各位,如有什么好建议,请继续提出来!
      

  5.   

    在Windows API中有许多获取图标的函数,但能从图标库文件中获取图标的函数是ExtractIconEx(具体的用法请参看此函数的帮助),它的格式和参数如下:
    Uint ExtractIconEx(lpszFile:PAnsiChar;nIconIndex:integer;var LaregeIcon,SmallIcon:HICON;nIcons:UINT);
    lpszFile:图标库的文件名;
    nIconIndex:要读取的图标在图标库中的次序(从0开始编号);
    LargeIcon、SmallIcon:如果读取成功时,图的句柄值;
    Nicons:要读取的图标个数,通常设置为1;
    该函数返回的值如果是0,表示读取失败。
    要枚举一个图标库的所有图标,只要利用以上函数从读取序号0开始读取,1,2...直到函数返回值为0。这样就将所有图标全取出来了
      

  6.   

    我用ExtractAssociatedIcon()可以提取任何图标
    但是存入ImageList后,16X16小图标显示效果不理想,到底是怎么回事?
      

  7.   

    to yangyun:
       用ExtractIconEx是可以提取图标库文件的所有图标,但怎么知道哪个文件是Windows系统的图标库文件,又怎么知道哪个图标又是对应什么扩展名呢?
    to kingron:
       用ExtractAssociatedIocn可以提取任何文件的图标,搜索注册表也可以得到所有已注册文件的扩展名,但ExtractAssociatedIocn中的参数需要指定具体的文件名,这样的话,要得到所有已注册的文件的图标,就不得不根据所得到的扩展名来找到一个相应的具体文件,这样一来,未免有点太麻烦了些吧,你说呢?
        可能是我对相应的api函数不太熟,是否有这样的函数,它能根据文件的扩展名,直接找到相应的图标(好象是没有)。
        我看过一些小软件,它们的功能是给Windows换肤的,其中就有给所有的某一类型的文件(例如.txt)换上一个统一的图标,我想如果完成这样一个功能的话,那么这个问题也应该可以解决了吧,不知我的思路对不对,希望大家指点,也希望对Windows比较熟悉的朋友说一些看法,大家交流交流!
      

  8.   

    可以根据文件的扩展名,直接找到相应的图标!看下面的函数:
    function GetIconFromExt(ext:string;var filename:string;var index:integer):boolean;
    var
     reg:tregistry;
     src:string;
    begin
     reg:=tregistry.create;
     reg.RootKey:=hkey_classes_root;
     result:=reg.OpenKey('.'+ext,false);
     if result then
     begin
       src:=reg.ReadString('');
       reg.CloseKey;
       if reg.OpenKey(src+'\defaulticon',false) then
       begin
         src:=reg.ReadString('');
         filename:=copy(src,0,pos(',',src)-1);
         index:=strtoint((trim(copy(src,pos(',',src)+1,length(src)-pos(',',src)))));
       end;
     end;
     reg.Free;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
     filename:string;
     index:integer;
    begin
    if geticonfromext(edit1.text,filename,index) then
    begin
      caption:=filename+','+inttostr(index);
      image1.Picture.Icon.Handle:=extracticon(hinstance,pchar(filename),index);
    end;
    end;
      

  9.   

    可以参考下面一段程序,它可以将某一文件的大、小显示图标调出来。
    var
      FileInfo: TSHFileInfo;
      Flags: Integer;
    begin
      FillChar(FileInfo, SizeOf(FileInfo), #0);
      Flags := SHGFI_PIDL or SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_IPENICON{或者 or SHGFI_LCARGEICON 或 or SHGFI_SMALLICON};
      SHGetFileInfo(PChar(PIDL),
                    0,
                    FileInfo,
                    SizeOf(FileInfo),
                    Flags);
      Result := FileInfo.iIcon;
    end;
      

  10.   

    to kingron:
        我对注册表不太熟悉,以至于你写的第一张帖子没能邻领悟上去,不好意思,看了你的例程后,又跟着F8了一下,才知道注册表那里是这么回事。非常感谢你的源程序,同时也感谢yangyun。
        谢谢你们大家的参与,我感觉在这里探讨问题(虽然是一些小问题),还是蛮有氛围的,最起码大家的互助精神让我感觉到自己并不是孤单一人走在漫漫无涯的编程之路上。
        你们的源代码相信也会给看到这个帖子的人一点启发(也许不仅仅是技术方面的)。
        同时,也非常想同kingron等人交个朋友,有时间给我写封信吧,也许我也有些方面是你(你们)所不太熟悉的呢,呵呵,有学习才有进步吗!
        my email:  [email protected]
        最后我还想问一下,%1 是否是通配符,只有 .exe 文件中才会出现吗?
      

  11.   

    %1表示使用文件本身的图标作为图标,其他的还有ICO,ANI,CUR等等,可以修改注册表,使其他的也使用这个参数,例如BMP,CPL等等。
    不过,还是使用YangYun的方法简单一点儿。
      

  12.   

    有人问了我这样一个问题:
        有个问题我不知道如何去处理: HICON和TICON有什么不一样,
    我用抓图标的API函数抓的是HICON,如何变成TICON?
    大家谁有空帮着回答一下!
      

  13.   

    不是,我这些天都不在网上,你还有什么问题吗?hicon-->Ticon,用类型强制就可以了,。