{根据文件的名字得到此文件在系统中对应大小的图标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;

delphi 获取文件图标的更多相关文章

  1. C# 获取文件图标

    今天突然想到一个问题,如何去获取一个文件的关联图标呢?于是就上网搜索了一下.现总结如下: 首先明确问题:获取一个文件的关联图标或者是某个类型文件的显示图标. 在网上搜了一圈,发现方法还是比较多的,但是 ...

  2. Delphi获取文件名、文件名不带扩展名、文件名的方法;delphi 获取文件所在路径

    取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一:   Function Extrac ...

  3. Qt之根据扩展名获取文件图标、类型

    简述 在C++根据扩展名获取文件图标.类型一节中我们分享了如何根据扩展名来获取对应的文件图标.类型,下面.我们在Qt中使用它. 简述 示例 效果 源码 更多参考 示例 如下,我们根据扩展名来获取对应的 ...

  4. C++根据扩展名获取文件图标、类型

    简述 在Windows系统中,根据扩展名来区分文件类型,比如:.txt(文本文件)..exe(可执行程序).*.zip(压缩文件),下面,我们来根据扩展名来获取对应的文件图标.类型. 简述 源码 源码 ...

  5. Qt之QFileIconProvider(根据扩展名获取文件图标、类型)

    简述 在Qt之QFileIconProvider一节中已经讲解关于如何获取文件图标与类型.但只仍针对本地已存在的文件,此节,我们主要运用前面分享的内容,讲述如何通过任意后缀或本地不存在的文件来获取相关 ...

  6. delphi 获取文件的最新修改时间 http://www.delphitop.com/html/wenjian/64.html

    delphi 获取文件的最新修改时间 作者:admin 来源:未知 日期:2010/1/28 13:15:22 人气:1054 标签: QQ空间新浪微博腾讯微博腾讯朋友QQ收藏百度空间百度贴吧更多0 ...

  7. c++ 获取文件图标,类型名称,属性 SHGetFileInfo

    SHGetFileInfo是一个相当实用的Windows API函数. // [MoreWindows工作笔记4] 获取文件图标,类型名称,属性 SHGetFileInfo #include < ...

  8. Delphi获取文件的大小(实际&物理)

    源:获取文件的大小(实际&物理) class function TDuoFile.GetFileSize(const AFile: TFileName): Int64; var sr:TSea ...

  9. delphi获取文件的创建/修改时间、按时间删除指定文件下的文件

    uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrl ...

随机推荐

  1. Python-UiAutomator2实现Android自动化测试

    本帖转自搜狗测试公众号 [一.前言]        基于Python-UiAutomator2实现Android自动化测试,小编在Android应用的自动化性能测试中进行了实践.本篇将简单介绍pyth ...

  2. 解决VSCode中Python在控制台输出中文乱码的问题

    在菜单Debug->Open Configurations,打开launch.json,新增如下粉红色字符内容: { // Use IntelliSense to learn about pos ...

  3. vue 表单校验报错 "Error: please transfer a valid prop path to form item!"

    vue 表单校验报错 "Error: please transfer a valid prop path to form item!" 原因:prop的内容和rules中定义的名称 ...

  4. 如何基于 Nacos 和 Sentinel ,实现灰度路由和流量防护一体化

    基于Alibaba Nacos和Sentinel,实现灰度路由和流量防护一体化的解决方案,发布在最新的 Nepxion Discovery 5.4.0 版,具体参考: 源码主页,请访问 源码主页指南主 ...

  5. Elasticsearch之index_closed_exception

    索引的打开与关闭 关闭索引 POST /index_name/_close 尝试插入数据 PUT /shakespeare/_doc/ { "title":"kibana ...

  6. Python每日一题 002

    做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...

  7. Spring Boot项目生成jar包,并在windows服务器中注册成服务,开机启动

    背景: 使用Spring Boot开发的Web项目,打包生成了一个jar包,希望能部署在Windows服务器中 尝试: 1.Spring Boot生成的jar包,可以直接用java -jar运行,但是 ...

  8. STM32嵌入式开发学习笔记(七):串口通信(下)

    下面我们进行几个串口通信的实际应用. 实验一:发信实验,让开发板通过串口向电脑发送信息: #include <stdio.h> #include <stm32f10x.h> # ...

  9. 卿烨科技 Fireball

    9人开发病毒感染超2亿电脑!Fireball病毒境外做案被举报   原标题:名校毕业生研发病毒年获利8000万 2.5亿台电脑感染 海淀网友协助民警追踪跨境黑客 高材生开公司研发病毒 一年获利8000 ...

  10. CSS:百科

    ylbtech-CSS:百科 1.返回顶部 CSS (层叠样式表) 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标 ...