HICON   ExtractIcon(   
          HINSTANCE   hInst, //   instance   handle   
          LPCTSTR   lpszExeFileName, //   filename   of   file   with   icon   
          UINT   nIconIndex   //   index   of   icon   to   extract   
        );   以上这个只是提取exe或者dll 等的图标我用下面的这个
 uses   ShellApi;   
  procedure   TForm1.Button1Click(Sender:   TObject);   
  var   
      FileInfo:   TSHFileInfo;   
  begin   
      if   OpenDialog1.Execute   then   
      begin   
          FileInfo.iIcon   :=   0;   
          SHGetFileInfo(PChar(OpenDialog1.FileName),   0,   FileInfo,   SizeOf(TSHFileInfo),SHGFI_ICON   or   SHGFI_LARGEICON);   
          Image1.picture.Icon.Handle   :=   FileInfo.hIcon;   
      end;   
  end;   但是提取出来的图标比较小,我看了一下,最大只有32*32的
我用别人写好的程序提取出来的图标可以有50*50的,同样一个文件,为什么提取出来的图标大小不一样呢,是不是别人的程序用的别的方法?
非常感谢!

解决方案 »

  1.   

    看看人家的导入表有没有用ExtractIcon不就知道了
    也很可能是直接操作resource读出来的,不过这种方法对加壳的文件很可能会出问题
      

  2.   

    SHGFI_LARGEICON 就是32X32的
    你找的应该是48x48
      

  3.   

    就是用ExtractIcon,注意第三个参数,传入UINT(-1)时可以获取图标总数,然后再循环获取每个图标(此时第三个参数基于0遍历).楼主没有好好看MSDN吧,以下是MSDN原文对ExtractIcon第三个参数的解释:nIconIndex
    ......
    If this value is -1, the function returns the total number of icons in the specified file. If the file is an executable file or DLL, the return value is the number of RT_GROUP_ICON resources. If the file is an .ICO file, the return value is 1. 
    ......
      

  4.   

     這是: ExtractIcon 的問題。讀下資源還還實際點。
      

  5.   

    直接读Resources看图标,其他的可能会出问题