⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 EXE文件加密码,ASP压缩处理.比较实用,大家拿去
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, ShellAPI, ExtCtrls, Buttons, Menus;

type
  Tfrm_Main = class(TForm)
    OpenDialog1: TOpenDialog;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Button_Directory: TSpeedButton;
    Button_OpenFile: TSpeedButton;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    StaticText_Pass1: TStaticText;
    Edit_FileName: TEdit;
    Edit_Pass: TEdit;
    Edit_Pass1: TEdit;
    Button_Go: TBitBtn;
    Button_UnGo: TBitBtn;
    TabSheet3: TTabSheet;
    lb_email: TLabel;
    lb_HomePage: TLabel;
    homepage: TLabel;
    email: TLabel;
    update: TLabel;
    lb_UpData: TLabel;
    lb_Author: TLabel;
    Edit_Caption: TEdit;
    StaticText_Caption: TStaticText;
    GroupBox1: TGroupBox;
    cb_Assoc: TCheckBox;
    btn_Apply: TButton;
    cb_NeedPass: TCheckBox;
    Button_Preview: TSpeedButton;
    Panel2: TPanel;
    Button1: TButton;
    StaticText3: TStaticText;
    StaticText5: TStaticText;
    rb_Speed: TRadioButton;
    rb_Comp: TRadioButton;
    CheckBox_BackUp: TCheckBox;
    lb_Ver: TLabel;
    Bevel1: TBevel;
    procedure Button_GoClick(Sender: TObject);
    procedure Btn_ExitClick(Sender: TObject);
    procedure Button_OpenFileClick(Sender: TObject);
    procedure Button_UnGoClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button_DirectoryClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Edit_FileNameChange(Sender: TObject);
    procedure emailClick(Sender: TObject);
    procedure homepageClick(Sender: TObject);
    procedure updateClick(Sender: TObject);
    procedure btn_ApplyClick(Sender: TObject);
    procedure Button_PreviewClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure cb_OptionClick(Sender: TObject);
  private
    sOpFileName,sPassWord,sCaption:String;
    procedure ResetForm;
    procedure BuzyForm;
    procedure DoLock;
    procedure DoUnLock;
    procedure CheckOpFile(FileName: String);
    procedure WMDropFiles(var Msg:TWMDropFiles); message WM_DROPFILES;
    procedure StatusText(sMsg_Error: String);
    procedure LockFileStream(SFName: String; BBackup: Boolean);
    procedure UnLockFileStream(SFName, PassWord: String);
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Ver='2.11';

  PassSize=18;
  CFlag='...FILE..LOCK...';

  { 用AsPack2.1压缩 }
  FileIconStart=$20C1C;
  FileExeStart=$21000;

  AssocString='用&EXELOCK加密';

  Error_FileNotExists='对不起,选的文件不存在,不能继续。';
  Error_NoPass='对不起,密码不能为空,请输入密码。';
  Error_PassNotSame='两次密码不一致,请检查并重新输入。';
  Error_FileLocked='文件已经加密,不能继续。';
  Error_FileNotLocked='文件没有加密,不能继续。';
  Error_PassWrong='密码错误,不能解密文件。';
  Error_FileType='文件类型不是EXE,加密后可能出错。';
  Error_FileAttribute='文件属性只读,是否改变属性继续。';
  Error_FileDelete='文件删除失败,可能被加密的程序正在使用。';
  Msg_DoLock='文件没有加密,可以加密。';
  Msg_DoUnLock='文件已经加密,可以解密。';
  Msg_BeginLock='开始加密文件,请稍后!';
  Msg_BeginUnLock='开始解密文件,请稍后!';
  Msg_EndLock='文件加密完成,谢谢使用。';
  Msg_EndUnLock='文件解密完成,谢谢使用。';
  Msg_BeginBackUpFile='正在备份文件,请稍后!';
  Msg_BeginLH='正在压缩加密文件,请稍后!';
  Msg_BeginUnLH='正在解压缩加密文件,请稍后!';
  Msg_Ready='准备就绪!';
  Msg_DefaultCaption='文件已经加密->输入解密密码';

type
  TLockedFile=record
    Flag:String[Length(CFlag)];
    PassWord:String[PassSize];
    Caption:String[52];
    Compressed:Boolean;
  end;

var
  frm_Main: Tfrm_Main;

implementation

{$R *.DFM}
{$R 1.RES}

uses Func, Encrypt_Base64, Compress_LH5, Preview, Password, Login;

procedure Tfrm_Main.ResetForm;
begin
  StatusText(Msg_Ready);
  Edit_Pass.Enabled:=True;
  Edit_Pass1.Enabled:=True;
  Edit_Caption.Enabled:=True;
  Edit_Pass.Text:=#0;
  Edit_Pass1.Text:=#0;
  Button_Go.Enabled:=True;
  Button_Go.Default:=False;
  Button_UnGo.Enabled:=True;
  Button_UnGo.Default:=False;
  Edit_FileName.Enabled:=True;
  Button_OpenFile.Enabled:=True;
  Button_Directory.Enabled:=True;
  Button_Preview.Enabled:=True;
  CheckBox_BackUp.Enabled:=True;
  StaticText_Pass1.Enabled:=True;
  StaticText_Caption.Enabled:=True;
  StatusText(Msg_Ready);
end;

procedure Tfrm_Main.BuzyForm;
begin
  Edit_Pass.Enabled:=False;
  Edit_Pass1.Enabled:=False;
  Edit_Caption.Enabled:=False;
  Button_Go.Enabled:=False;
  Button_UnGo.Enabled:=False;
  Edit_FileName.Enabled:=False;
  Button_OpenFile.Enabled:=False;
  Button_Directory.Enabled:=False;
  Button_Preview.Enabled:=False;
  CheckBox_BackUp.Enabled:=False;
end;

procedure Tfrm_Main.LockFileStream(SFName:String;BBackup:Boolean);
var
  S,T,C:TMemoryStream;
  LockedFile:TLockedFile;
  procedure GetPassDialogFile(tStream:TStream);
  var
    m1,m2:TMemoryStream;
    ExeRes:TResourceStream;
    bb:Byte;r,s:Integer;
    sIcon:TIcon;
  begin
    ExeRes:=TResourceStream.Create(Hinstance,'File1','EXEFILE');
    sIcon:=TIcon.Create;
    try
      sIcon.Handle:=ExtractIcon(Application.Handle,PChar(SFName),0);
      if sIcon.Handle<>0 then
      begin
        m1:=TMemoryStream.Create;
        m2:=TMemoryStream.Create;
        try
          sIcon.SaveToStream(m1);
  //        sIcon.SaveToFile('test.ico');
          m2.LoadFromStream(ExeRes);
          s:=m1.Seek(0,2);
          m1.seek($16,0);
          m2.seek(FileIconStart+$14,0);
          repeat
            r:=m1.Read(bb,SizeOf(bb));
            m2.write(bb,r);
          until m1.seek(0,1)=s;
          m2.SaveToStream(tStream);
        finally
          m1.Free;
          m2.Free;
        end;
      end else
        ExeRes.SaveToStream(tStream);
    finally
      sIcon.Free;
      ExeRes.Free;
    end;
  end;
begin
  S:=TMemoryStream.Create;
  T:=TMemoryStream.Create;
  C:=TMemoryStream.Create;
  try
    S.LoadFromFile(SFName);
    if BBackUp then
    begin
      StatusText(Msg_BeginBackUpFile);
      S.SaveToFile(ChangeFileExt(SFName,'.BAK'));
    end;
    with LockedFile do
    begin
      Flag:=CFlag;
      Caption:=sCaption;
      PassWord:=Base64Encode(sPassWord);
      Compressed:=rb_Comp.Checked;
    end;
    GetPassDialogFile(T);
    S.Position:=0;
    T.Seek(0,2);
    StatusText(Msg_BeginLH);
    if LockedFile.Compressed then
    begin
      C.Position:=0;
      LHACompress(S,C);
      C.Position:=0;
      T.CopyFrom(C,C.Size);
    end else T.CopyFrom(S,S.Size);
    T.Write(LockedFile,SizeOf(LockedFile));
    if DeleteFile(SFName) then
    begin
      T.SaveToFile(SFName);
      MessageBox(Handle,Msg_EndLock,'信息',MB_OK);
    end else
      MessageBox(Handle,Error_FileDelete,'错误',MB_OK);
  finally
    S.Free;
    T.Free;
    C.Free;
  end;
end;

procedure Tfrm_Main.UnLockFileStream(SFName, PassWord:String);
var
  S,T,C:TMemoryStream;
  LockedFile:TLockedFile;
begin
  S:=TMemoryStream.Create;
  T:=TMemoryStream.Create;
  C:=TMemoryStream.Create;
  try
    S.LoadFromFile(SFName);
    S.Seek(-SizeOf(LockedFile),2);
    S.Read(LockedFile,SizeOf(LockedFile));
    if Base64Decode(LockedFile.PassWord)=PassWord then
    begin
      S.Position:=FileExeStart;
      T.Position:=0;
      StatusText(Msg_BeginUnLH);
      if LockedFile.Compressed then
      begin
        C.Position:=0;
        C.CopyFrom(S,S.Size-FileExeStart-SizeOf(LockedFile));
        C.Position:=0;
        LHAExpand(C,T);
      end else T.CopyFrom(S,S.Size-FileExeStart-SizeOf(LockedFile));
      if DeleteFile(SFName) then
      begin
        T.SaveToFile(SFName);
        MessageBox(Handle,Msg_EndUnLock,'信息',MB_OK);
      end else
        MessageBox(Handle,Error_FileDelete,'错误',MB_OK);
    end else
      MessageBox(Handle,Error_PassWrong,'警告',MB_OK);
  finally

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -