怎样从一个文件中提取出所有图标?(100分)

  • 主题发起人 主题发起人 wangrui
  • 开始时间 开始时间
W

wangrui

Unregistered / Unconfirmed
GUEST, unregistred user!
; 有些程序中的图标挺漂亮,怎样才能从一个文件中提取出所有图标?
 
HICON ExtractIcon(
HINSTANCE hInst, // instance handle
LPCTSTR lpszExeFileName, // filename of file with icon
UINT nIconIndex // index of icon to extract
);
 
用resexplor可以得到(delphi的demo里有).
 
; 怎样知道一个文件中图标的个数呢 ?
 
iconcount:=ExtractIcon(0,EXEfilename,-1);
 
ExtractIcon() 可以从 *.dll 中提取图标吗 ?
ExtractIcon() 和 ExtractIconEx() 有什么区别吗?
 
ExtractIcon() 可以从 *.dll 中提取图标.

The ExtractIconEx function retrieves the handle of an icon from the
specified executable file, dynamic-link library (DLL), or icon file.

HICON ExtractIconEx(

LPCSTR lpszFile,
int nIconIndex,
HICON FAR * phiconLarge,
HICON FAR * phiconSmall,
UINT nIcons
);
有大小图标之分。
 
呵呵! 我来个标准解决方案:

首先声明一个API:
Function SHChangeIconDialog(hOwner:hwnd;szFilename:pchar;Reserved:longint; var lpIconIndex:Longint):Longint;stdcall;external 'shell32' index 62;


function TForm1.GetIconFromExe(ExeName:string):HIcon;
Var ic:longint;
idx:integer;
Exe:Pchar;
begin
getmem(Exe,255);
Exe:=pchar(ExeName); //参数可以为空串,看看结果是什么?
ic:=SHChangeIconDialog(handle,Exe,0,idx);
if ic<>0 then //成功调用
result:=extracticon(0,Exe,idx);
end;

这样使用:
imgicon.Picture.Icon.Handle:=GetIconFromExe('xxx.exe');
 
有些按钮上的"图标"并不是图标,而是位图(*.bmp),ExtractIcon()似乎不能
提取这些位图 ? 例如我从 Winzip32.exe 中总共只提取了19个图标,Winzip
工具栏里那一排大按钮的图标就没有提取出来 ? 怎样才能把这些位图资源提取
出来呢 ?
 
to lovedelphi: 这些"位图"不一定作为资源存放的.
最简单的办法: PrintScreen+PhotoShop :-) 这个我最拿手了!
 
多人接受答案了。
 
后退
顶部