请教:有没有办法根据扩展名从windows系统的注册信息中取得文件图标,而不是从文件中取得Icon?

scott21cn 2002-05-28 05:14:38
我的文件存在数据库中,如果只能从文件中取图标,我得先把文件从数据库中写到磁盘,那太耗资源了!
...全文
30 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrmengyi 2002-06-03
  • 打赏
  • 举报
回复
>>我的文件存在数据库中
提取的是什么图标?
楼上的说的都是文件关联的图标
SHGetFileInfo是可以得到TICON的(按后缀)
但是文件必须存在
你可以建立一个0字节的临时文件
指定后缀就可以了

读Registry也是可以的
bcb_alone 2002-05-29
  • 打赏
  • 举报
回复
我认为可以用注册表。
在HKEY_CLASSES_ROOT下,一打开,那些以“.”开头的就是文件的扩展名。
剩下的就是打开那些扩展名的文件的相关键值。
如果新建一个扩展名为“SSS”的文件,
那么在HKEY_CLASSES_ROOT下建一个“.sss"的文件夹,在这个文件夹下建
"defaulticon",然后写它的默认值为”c:\xxx\xxx.ico"
在每一个扩展名都有一个关于它的ICON,只不过有些方法不同。
并且还要知道当前的文件的打开方式。
以上,你可以看看关于注册表的书。
scott21cn 2002-05-29
  • 打赏
  • 举报
回复
up!
libamboo 2002-05-29
  • 打赏
  • 举报
回复
mark
scott21cn 2002-05-28
  • 打赏
  • 举报
回复
TO:icefirewx
S := GetFileType(AFileName);

這一句通不過!
直接給S賦值,但取不出相應ICON!

icefirewx 2002-05-28
  • 打赏
  • 举报
回复
procedure GetFileIcon(const AFileName: string; AIcon: TIcon);
var
H, I: Integer;
S: string;
reg: TRegistry;
begin
S := GetFileType(AFileName);
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;
if (S <> '') and reg.OpenKey(S + '\DefaultIcon', False) then S := reg.ReadString('');
if S = '' then S := 'Shell32.dll';
I := Pos(',', S);
if I > 0 then
begin
H := StrToInt(Copy(S, I + 1, Length(S) - I));
S := Copy(S, 1, I - 1);
I := H;
end
else
I := 0;
AIcon.Handle := ExtractIcon(Hinstance, PChar(S), I);
finally
reg.Free;
end;
end;
mygodness 2002-05-28
  • 打赏
  • 举报
回复
那你干脆用文件来保存吧!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧