📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Bevel1: TBevel;
Button3: TButton;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Title := '选择EXE文件';
OpenDialog1.Filter := 'EXE文件|*.exe';
if OpenDialog1.Execute then
Edit1.Text := OpenDialog1.FileName;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
swfFile: TFileStream; // 用于存储SWf文件内容并保存
exeFile: TFileStream; // 用于读取EXE文件
swfFileName, exeFileName: String;
nFileSize: Integer; // 用于存储SWF文件大小
begin
// 将Edit1中的路径赋给exeFileName变量
exeFileName := Edit1.Text;
// 修改EXE路径中的扩展名,以获取SWF文件的存储路径。
swfFileName := ChangeFileExt(exeFileName, '.swf');
// 检查指定的EXE文件是否存在,如果不存在则退出过程,不做任何处理。
if not FileExists(exeFileName) then
begin
ShowMessage('文件未找到!');
Exit;
end;
// 分别创建swfFile及exeFile对象
// 创建空的swf文件并赋于写入的权限(fmOpenWrite)
swfFile:=TFileStream.Create(swfFileName, fmCreate or fmOpenWrite);
// 打开EXE文件,并赋于读取的权限(fmOpenRead)
exeFile:=TFileStream.Create(exeFileName, fmOpenRead);
// 从EXE文件开头搜索
// 将文件指针移到存储SWF文件大小的地方
// exeFile.Size用于获取整个EXE文件的大小,减去4个字节正好是SWF文件大小储存的地方
exeFile.Seek(exeFile.Size - 4, soFromBeginning);
// 读出SWF文件的大小
exeFile.Read(nFileSize, 4);
// 将文件指针移动到SWF文件开始处
exeFile.Seek(exeFile.Size - (nFileSize + 8), soFromBeginning);
// 将SWF文件所有内容复制到swfFile对象中去
// 此时SWf文件内容已保存在硬盘中了
swfFile.CopyFrom(exeFile, nFileSize);
// 释放资源
swfFile.Free;
exeFile.Free;
ShowMessage('SWF文件已成功还原!');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -