三九宝宝网宝宝百科宝宝知识

delphi中修改已生成exe文件的ico图标

12月22日 编辑 39baobao.com

[镜泊湖及瀑布上虹的生成]牡丹江位于黑龙江东南部,由南偏西穿过山谷向北流入松花江,江水丰沛,两岸景色宜人。牡丹江上游是火山地带,至今留有许多火山喷发遗迹,如随处可见的火山石,以及火山口地下森林,还有就...+阅读

Project——Options...——Application,点击Load Icon... 可以修改icon unit ICOEXE; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls, shellapi; type TForm1 = class(TForm) Label1:TLabel; Edit1:TEdit; Label2:TLabel; Edit2:TEdit; Button1:TButton; Button2:TButton; OpenDialog1:TOpenDialog; OpenDialog2:TOpenDialog; StatusBar1:TStatusBar; procedure Button2Click(Sender:TObject); procedure Button1Click(Sender:TObject); private { Private declarations } public { Public declarations } end; var Form1:TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender:TObject); begin Close; end; procedure TForm1.Button1Click(Sender:TObject); const readlen = 10; //每次读取字节数,可改变 icolen = 766; //32*32图标长度,根据研究前126为图标头,后640为图标数据 var i, j, itemp, nPos:int64; // nPos为目的图标在目的文件的位置 ci, cj:array[0..readlen - 1] of char; SourceFile, DestFile:string; //如果要把记事本图标换成瑞星杀毒软件图标 bOK:boolean; //则SourceFile='C:\windows\notepad.exe',DestFile:='C:\Progra m Files\rising\rav\ravmon.exe' SourceIcon, DestIcon:TIcon; SIconStream, s, sDest:TMemoryStream; begin bOK := false; if OpenDialog1.Execute then SourceFile := OpenDialog1.FileName else exit; if AnsiUpperCase(ExtractFileExt(SourceFile)) '.EXE' then begin ShowMessage(AnsiUpperCase(ExtractFileExt(SourceFile))); exit; end; Edit1.Text := SourceFile; if OpenDialog2.Execute then DestFile := OpenDialog2.FileName else exit; if AnsiUpperCase(ExtractFileExt(DestFile)) '.EXE' then exit; Edit2.Text := DestFile; SourceIcon := TIcon.Create; case ExtractIcon(handle, PChar(SourceFile), UINT(-1)) of 0: begin ShowMessage('源程序没有图标'); exit; end; 1:; else ShowMessage('源程序有多个图标,本程序选择第一个图标'); end; SourceIcon.Handle := ExtractIcon(handle, PChar(SourceFile), 0); //选择第一个图 标 DestIcon := TIcon.Create; //选择第N个图标为 ExtractIcon(handle,PChar(Source file), N - 1) case ExtractIcon(handle, PChar(DestFile), UINT(-1)) of0: begin ShowMessage('目的程序没有图标'); exit; end;1:; else ShowMessage('目的程序有多个图标,本程序选择第一个图标替换'); end; DestIcon.Handle := ExtractIcon(handle, PChar(DestFile), 0); //选择第一个图标 SIconStream := TMemoryStream.Create; DestIcon.SaveToStream(sIconStream); if sIconStream.size icolen then ShowMessage('SIcon.sizeicolen'); SDest := TMemoryStream.Create; sDest.LoadFromFile(DestFile); i := 0; j := 0; //以下程序查找目的图标在目的程序中的位置 while i begin itemp := i; j := 126; { repeat SDest.Position:=i; sDest.read(ci,Readlen); SiconStream.Position:=j; SIconStream.Read(cj,Readlen); i:=i+Readlen; j:=j+Readlen; until (String(ci)=String(cj)) and (i} ci := ''; cj := ''; while (string(ci) = string(cj)) and (i icolen) do begin i := i + readlen; j := j + readlen; SDest.Position := i; SDest.read(ci, readlen); SiconStream.Position := j; SiconStream.Read(cj, readlen); end; if j i := itemp + 1 //没找到 else begin nPos := itemp; //找到 bOK := true; break; end; end; if bOK = false then exit; //目标文件二进制码中未找到图标 SIconStream.Clear; //将源程序图标存入 SourceIcon.SaveToStream(SIconStream); SIconStream.position := 126; s := TMemoryStream.Create; sDest.Position := 0; s.CopyFrom(sDest, nPos); //将目的程序图标前数据拷入 s.CopyFrom(SIconStream, 640); //将源程序图标拷入 if sDest.size >sDest.Position + 640 then //将目的程序剩余数据拷入 begin sDest.Position := sDest.Position + 640; s.CopyFrom(sDest, sDest.Size - sDest.Position); end; s.SaveToFile(Extractfilepath(application.exename) + 'Result.exe'); SourceIcon.Free; DestIcon.Free; //改造好的程序存放在本目录Result.exe文件中 SIconStream.Free; s.Free; sDest.Free; ShowMessage(Extractfilepath(application.exename) + 'Result.exe'); end;//以上程序可以将目的程序的第一个图标换成源程序的第一个图标,经实证很多程序有二个//或更多图标,转换原理相似,不在陈述 end.

以下为关联文档:

如何点亮QQ家园的图标★火&舞★ 你好: 声望排名前5的我写的答案!绝对可信--绝对可行! 请采纳,相信楼主的眼光是雪亮的! 点亮QQ家园的终极方法:(按下面的步骤做,肯定能开通、点亮你的QQ家园图标!!) ★1.建议...

QQ家园的图标怎么点亮hui‰/loveni 你好: ★┇点亮QQ家园图标方法↗详细步骤↖┇★ ( 答案归本人:φ天秤船щ 所有! ) ( 禁止他人复制以上内容! ) ( 若有人复制,请提问者别采纳 ) 注:如果按以下步骤做了★图...

简单的学生成绩统计程序!#include "stdio.h" #include <stdlib.h> #define SIZE 5 void main() { int i,j; float midscore[SIZE],endscore[SIZE],totall[SIZE],score; for(i=0;i<SIZE;i++) { printf("...

生成绩管理程序别忘了给分! /**********************************************************/ #include #include #include #define N 3 /*学生人数*/ #define M 3 /*课程门数*/ void input(...

word图表目录怎么生成1、首先在电脑上打开word,这里有一个图表。 2、你需要加上相应的题注,把光标停留在适当的地方,一般是图表的下方,然后,选择上功能选项卡的”引用“选项卡。 3、点击“插入题注...

word中怎么生成图目录表目录在word里自动生成图表目录 1、选中你要编号的图表,插入——〉引用——〉题注打开题注对话框。 2、在选项的标签中可以选择你想要的标签,如果没有可以新建标签,例如新建“表”就...

word2010怎样生成图目录word2010中自动生成图表目录的步骤如下: 步骤一:首先我们用在word中制作插入一个表格,大家对照图片操作。 步骤二:点击“插入”在点击“表格”之后直接选择3*2的表格,点击即可生...

Word文档中图表目录怎么自动生成方法一: 首先,加题注:我们打开word,给我们的图表加上相应的题注,把光标停留在适当的地方,一般是图表的下方,然后,选择上功能选项卡的引用——》插入题注 点击插入题注后,弹出题注对话...

利用mybatis自动生成代码后怎么使用这些代码实例MyBatis中,可以使用Generator自动生成代码,包括DAO层、 MODEL层 、MAPPING SQL映射文件。 第一步:下载MyBatis的Generator工具 htt p:/ /mybati s.gith ub.i o/generator/ 第二...

推荐阅读
图文推荐