提取应用程序中的图标资源

原创 2001年05月12日 17:33:00

提取应用程序中的图标资源


  经常看见一些软件有着美丽,光艳夺目,非常个性化的图标,曾几何时也想拥有,可苦于缺少一点点艺术细胞,只好打起妙手空空的念头。经过一天的捉摸,也找到一些门道,效果还佳,再用delphi自带的Image Editor加以修改,彻底私有化,为我所用。洒家用此法做了一些漂亮的图标,令老友羡慕不已。好了,好东西当然不敢独享,且容我为各位慢慢道来:
首先用API函数LoadLibrary(lpLibFileName: PChar): HMODULE; stdcall; 把指定的程序模块映射到调用程序的地址空间去。该函数返回模块的句柄,假定为hExe;
然后用EnumResourceNames(hExe,RT_ICON,@EnumResName,myflag)找到图标的资源名,其中参数EnumResName是回调函数,图标的name值将由回调函数的一个变参得到。
然后再向回调函数体内加入代码提取图标就可以了。EnumResourceNames函数将会一直查找每一个图标直到查找失败或EnumResName返回false值为止。这样我们就能提取程序所包含的每一个图标,榨尽最后一滴油,够狠吧!
详细代码如下:
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Menus, ImgList;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
Exit1: TMenuItem;
OpenDialog1: TOpenDialog;
ListView1: TListView;
StatusBar1: TStatusBar;
ImageList1: TImageList;
procedure Open1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
FileName: TFileName;
FIcon: TIcon;
public
{ Public declarations }
end;
Function EnumResName(hModule: HMODULE; lpType, lpName: PChar;lParam: Longint):BOOL;stdcall;
var
Form1: TForm1;
hExe: HINST;
implementation
{$R *.DFM}
Function EnumResName(hModule: HMODULE; lpType, lpName: PChar;lParam: Longint):BOOL; //回调函数不能是对象方法
//lpType是要提取的资源类型,这里为RT_ICON
//lpName为图标资源名
var
hIcon1: HICON;
hResource: HRSRC;
hMem: HRSRC;
lpResource: PByte;
ListItem: TListItem;
Begin
//返回在hExe模块中lpName指定的图标资源的句柄;
hResource:=FindResource(hExe,lpName,RT_ICON);
//Load and Lock the icon
hMem:=LoadResource(hExe,hResource);
lpResource:=LockResource(hMem);
//从资源文件中创建图标并返回其句柄
hIcon1:=Create Iconfrom Resource Ex(lp Resource,Sizeof Resource(hExe,h Resource),True,$00030000,32,32,LR-DEFAULTCOLOR);
with Form1 do
begin
//用控件ImageList保存提取的图标,并在ListView中显示出来
FIcon.Handle:=hIcon1;
ImageList1.AddIcon(fIcon);
ListItem:=ListView1.Items.Add;
ListItem.ImageIndex:=ImageList1.Count-1;
end;
result:=true;//注意:只有返回为真值时,才能继续提取下一个图标
end;
procedure TForm1.Open1Click(Sender: TObject);
var
myflag: integer;
begin
if Opendialog1.Execute then
begin
FileName:=Opendialog1.FileName;
StatusBar1.Panels.Items[0].Text:=FileName;
Opendialog1.HistoryList.Add(FileName);
hExe:=LoadLibrary((PCharFileName));
myflag:=1;
ImageList1.Clear;
ListView1.Items.Clear;
EnumResourceNames(hExe,RT_ICON,@EnumResName,myflag);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FIcon:=TIcon.Create;
Opendialog1.Filter:='可执行文件(*.exe)|*.exe';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FIcon.Free;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
end.
篇幅所限,存盘和查错的代码没有列出

从其他应用程序中提取图标

问题由来苦逼个人码农没有设计师给设计图标,只能到处找icon,但总是很难找到合适的。其实从现有的软件中提取图标出来是个不错的方法,于是问题便来了。方法使用图标提取软件这种软件貌似只能提取一个exe的图...
  • sunnyloves
  • sunnyloves
  • 2015年10月31日 11:14
  • 1553

一个从EXE、DLL文件中提取、存取图标完整程序

       作为一名程序员,会经常为制作、设计程序图标费尽心思,当我们看到许多应用软件的图标非常漂亮的时候,是多么的羡慕!我们可不可以借鉴一下他们的图标?完全可以!我们利用 ExtractIcon ...
  • CoolDesigner
  • CoolDesigner
  • 2002年01月14日 09:13
  • 2302

提取应用程序中的图标资源

  • zgqtxwd
  • zgqtxwd
  • 2008年04月30日 19:03
  • 119

获取现成的应用程序的资源

别的应用程序图标和工具栏很好看,如何拿过来用用呢。老师上课讲了,后来忘了,今天问了问同学才知道很简单。1、打开文件-在文件类型中选择Executable Files(.exe; .dll;.ocx)-...
  • httplt
  • httplt
  • 2008年02月20日 15:06
  • 272

GetIcons:C#提取应用程序的图标资源

在写C#窗口程序时,看厌了默认的图标,想更换下图标,可是电脑中的图标文件(.ico)很少。于是,想到写个程序来提取其他程序中的图标资源。 【网通】点击这里下载全部源程序     【电信、...
  • pengqianhe
  • pengqianhe
  • 2012年09月24日 16:44
  • 2449

获取.exe/.dll/.icon文件的Icon图标资源

获取.exe/.dll/.icon文件的Icon图标资源
  • qq2399431200
  • qq2399431200
  • 2014年01月04日 19:23
  • 2967

根据快捷方式获取应用程序的图标(去掉快捷方式的箭头)

第一步  引用COM组件 右键“引用”,“添加引用”,选择“COM组件”,找到“Windows Script Host Object Model”,然后确定。 第二步  编写创建快捷方式的代码 ...
  • cdefg198
  • cdefg198
  • 2012年08月10日 10:11
  • 2111

win32提取应用程序图标

ExtractIcon:函数可以办到 #include #include #include "resource.h" // 窗口处理函数 HINSTANCE g_...
  • u014660247
  • u014660247
  • 2016年10月13日 18:58
  • 387

Ubuntu 给应用程序添加桌面图标

我这里以Eclipse举例说明: eclipse是下载的是解压就能用的,但是没有桌面图标就显得很无力了。自己写了一个eclipse.desktop放到/usr/share/applications/...
  • u011793797
  • u011793797
  • 2014年07月07日 10:04
  • 1107

获取exe文件中的图标

public Icon[] myicon=new Icon[1000];        public int currentIndex=0;        [System.Runtime.Intero...
  • LeoMaya
  • LeoMaya
  • 2007年10月21日 00:39
  • 735
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:提取应用程序中的图标资源
举报原因:
原因补充:

(最多只允许输入30个字)