{根据文件的名字得到此文件在系统中对应大小的图标large=true(64*64) false(32*32)}
procedure GetFileIcon(TypeName: Widestring; Icon: TIcon;Large:Boolean=False);
var
strTmp: Widestring;
IndexS, IndexL: HIcon;
ShFileInfo: TSHFileInfo ;
imgList: TImageList;
begin
strTmp := TypeName;
TypeName := Tnt_WideLowerCase(wideExtractFileExt(strTmp));
if pos('.', TypeName) = 0 then
TypeName := '.' + TypeName;
if Large then
begin
//如果是EXE、Ico文件,直接取文件的图标
if (TypeName = '.exe') or (TypeName = '.ico') then
begin
ExtractIconExw(pwidechar(strTmp), 0, IndexL, IndexS, 1);
if IndexS <> 0 then
begin
Icon.Handle := IndexL;
exit;
end;
end;
//在临时目录下建立一个空类型文件,便于取图标
TypeName := GetWindowsTempPath + TypeName;
if not wideFileExists(TypeName) then
with TUniFileStream.Create(TypeName, fmCreate) do
Free;
imgList := TImageList.CreateSize(64, 64);
try
{将系统图象列表连接到TListView控件上。注意我们设置动态建立的图象列表
的ShareImages属性为真,这可以确保我们不试图释放Windows系统拥有的图象}
imgList.ShareImages := True;
imgList.Handle := ShGetFileInfo ('', 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_LARGEICON);
ShGetFileInfo (pchar( string( TypeName)), 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_LARGEICON);
imgList.GetIcon(SHFileInfo.iIcon, Icon);
finally
imgList.Free;
end;
end else
begin
//如果是EXE、Ico文件,直接取文件的图标
if (TypeName = '.exe') or (TypeName = '.ico') then
begin
ExtractIconExw(pwidechar(strTmp), 0, IndexL, IndexS, 1);
if IndexS <> 0 then
begin
Icon.Handle := IndexS;
exit;
end;
end;
//在临时目录下建立一个空类型文件,便于取图标
TypeName := GetWindowsTempPath + TypeName;
if not wideFileExists(TypeName) then
with TUniFileStream.Create(TypeName, fmCreate) do
Free;
imgList := TImageList.CreateSize(32, 32);
try
imgList.ShareImages := True;
imgList.Handle := ShGetFileInfo ('', 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_SMALLICON);
ShGetFileInfo (pchar( string( TypeName)), 0, SHFileInfo, SizeOf(SHFileInfo),
SHGFI_SYSICONINDEX or
SHGFI_SMALLICON);
imgList.GetIcon(SHFileInfo.iIcon, Icon);
finally
imgList.Free;
end;
end;
end;

最新文章

  1. Sprintf新解 (ZT)
  2. android添加第三方字体并设置的简单使用
  3. jQuery 的属性
  4. ADB常用命令(Android Debug Bridge)
  5. webApp路由控制-vue-router2.0
  6. jenkins使用deploy-plugin自动构建部署war包
  7. MySQL执行存储过程权限
  8. setjmp 与 longjmp
  9. Raspberry Pi3 ~ 安装samba服务
  10. 解读XMP元数据中ALAssetRepresentation
  11. 【转】Linux内核调试方法总结
  12. vim下高级操作以及文本替换命令
  13. hdu1501 Zipper
  14. gstreamer在Ubuntu下构建开发环境
  15. TCP端口检测工具
  16. 面向对象的 __slots__
  17. nginx介绍(六) - 通过反向代理实现跨域访问
  18. 整体二分求动态区间第k大
  19. Maximum Average Subarray I LT643
  20. 从头开始学习vue-router

热门文章

  1. javascript笔记 (持续更新)
  2. springcloud feign增加熔断器Hystrix
  3. 【leetcode】133. Clone Graph
  4. MySQL - primary key PK unique key,key PK index
  5. HBase与Sqoop集成案例
  6. NX二次开发-基于NX开发向导模板的NX对Excel读写操作(OLE方式(COM组件))
  7. Transactional事务管理操作
  8. targetSdkVersion和与target属性的区别
  9. CF C. Fly
  10. 天梯L3-003. 社交集群——并查集