我用ShGetFileInfo('*.*',0,
SHFileInfo, SizeOf(SHFileInfo),
SHGFI_LARGEICON or
SHGFI_ICON or SHGFI_SYSICONINDEX);
获取系统的图标,结构什么都没有得到,请问哪儿错了?

解决方案 »

  1.   

    uses
      ShellApi;function GetSystemImageList(mImageList: TImageList): Boolean;
    { 返回系统图标到图形列表中是否成功 }
    var
      vHandle: THandle;
      vSHFileInfo: TSHFileInfo;
    begin
      FillChar(vSHFileInfo, SizeOf(vSHFileInfo), 0);
      vHandle := SHGetFileInfo('', 0, vSHFileInfo, SizeOf(vSHFileInfo),
        SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
      Result := vHandle <> 0;
      mImageList.Handle := vHandle;
      mImageList.ShareImages := True;
    end; { GetSystemImageList }function GetIconIndex(mPath: string): Integer;
    { 返回文件或路径所对应的图标序号 }
    var
      vSHFileInfo: TSHFileInfo;
    begin
      FillChar(vSHFileInfo, SizeOf(vSHFileInfo), 0);
      SHGetFileInfo(PChar(mPath), 0, vSHFileInfo, SizeOf(vSHFileInfo),
        SHGFI_SYSICONINDEX);
      Result := vSHFileInfo.iIcon;
    end; { GetIconIndex }//....
    GetSystemImageList(ImageList1);
      

  2.   

    zswang(伴水清清)(专家门诊清洁工) 我按照你的办法取,只能取到5个系统图标,别的图标都没有
      

  3.   

    在Win2000/XP下的确是这样的
    但事实有获得所有Icon,只是不能显示
    还要通过指定文件名再获得该文件的图表
      

  4.   

    试试zswang(伴水清清)(专家门诊清洁工) 的方法。