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

📄 encryptformfile.cpp

📁 可以使用硬件指纹作为密钥加密文件
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include "MyClassFile.h"
#include "AboutFormFile.h"
#include "EncryptFormFile.h"
#include "AddShellFormFile.h"
#include "DecryptFormFile.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "XPMenu"
#pragma link "CSPIN"
#pragma link "DiskInfo"
#pragma link "Explform"
#pragma resource "*.dfm"
TEncryptForm *EncryptForm;
TPascalFun *PascalFun; //引用Delphi函数的类
TMyClass *MyClass;  //作者自定义的类
//---------------------------------------------------------------------------
__fastcall TEncryptForm::TEncryptForm(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::UseNormalEncryptClick(TObject *Sender)
{
Password->Enabled=UseNormalEncrypt->Checked;
Repeat->Enabled=UseNormalEncrypt->Checked;
if(!Password->Enabled)
{
Password->Text=""; Repeat->Text="";
}
}
//---------------------------------------------------------------------------

void __fastcall TEncryptForm::UseLimitTimeClick(TObject *Sender)
{
ST->Enabled=UseLimitTime->Checked;
ET->Enabled=UseLimitTime->Checked;
if(UseLimitTime->Checked)
{
  ST->Value=0;
  ET->Value=23;
}
if(!UseLimitTime->Checked)//24表示不使用“限时加密”
{
  ST->Value=24;
  ET->Value=24;
}
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::UseCDVOLClick(TObject *Sender)
{
if(UseCDVOL->Checked)
{
DiskInfo->Disk=MyClass->FindCD(EncryptForm->DiskInfo);
if(DiskInfo->DiskSize>1) //尝试检测光盘
ShowMessage("在解密文件前,请妥善保管这张光盘");
else{
    ShowMessage("请把光盘插进光驱里!");
    UseCDVOL->Checked=false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::StartEncryptClick(TObject *Sender)
{
unsigned long BanMove,CDVOL;
AnsiString EncryptResult;
TStringList *EncryptFileList=new TStringList;
TStringList *UnEncryptFileList=new TStringList;

if(FileList->Items->Text.Length()<1)
{
   ShowMessage("请先查找欲加密的文件!");
   return;
}
if(Password->Text!=Repeat->Text)
 {
   ShowMessage("输入的密码与重复的密码不符!");
   return;
  }
if(ST->Value>ET->Value)
{
   ShowMessage("限制解密的时间不能从大到小!");
   return;
}
if(UseBanMove->Checked)
{
   DiskInfo->Disk='C';
   BanMove=abs(DiskInfo->SerialNumber);
}
if(!UseBanMove->Checked)
  BanMove=19851120;
if(UseCDVOL->Checked)
{
  DiskInfo->Disk=MyClass->FindCD(EncryptForm->DiskInfo);
  CDVOL=abs(DiskInfo->SerialNumber+DiskInfo->DiskSize/1024);
}
if(!UseCDVOL->Checked)
  CDVOL=19860308;

MyClass->ShowMyMessage("加密普通文件","正在加密文件......");

if(UseCompress->Checked)//用户使用了“把所有加密文件压缩、合并到文件包里”
{
// 先把文件合并到文件包,压缩再加密
AnsiString PackageFileName=ExtractFilePath(Application->ExeName)+"Package.xml";
PascalFun->LoadFromRes("PackageFile","XMLFile",PackageFileName);
ADOTable->LoadFromFile(PackageFileName);
for(int i=0;i<FileList->Items->Count;i++)//合并到文件包
{
MyClass->ToPackage(ADOTable,FileList->Items->Strings[i]);
PascalFun->WipeFile(FileList->Items->Strings[i]);//删除文件
}
ADOTable->SaveToFile(PackageFileName,pfXML);   //先保存文件包
MyClass->Compress(PackageFileName);//再压缩
CopyFile((MyClass->EncryptFile(PackageFileName,".coco",Password->Text,ST->Value,ET->Value,BanMove,CDVOL)).c_str(),(SaveDialog->FileName+".coco").c_str(),true);
DeleteFile(PackageFileName+".coco");
}
if(!UseCompress->Checked)   //没有使用
{
 for(int i=0;i<FileList->Items->Count;i++)
 {
   EncryptResult=MyClass->EncryptFile(FileList->Items->Strings[i],".gv",Password->Text,ST->Value,ET->Value,BanMove,CDVOL);
   if(EncryptResult.Length()>1)//成功加密
   EncryptFileList->Add(FileList->Items->Strings[i]);
   if(EncryptResult.Length()<1)//加密失败
   UnEncryptFileList->Add(FileList->Items->Strings[i]);
   }
}
MyClass->CloseMyMessage();  //弹出对话框前关闭提示
if(!UseCompress->Checked)   //没有使用
{
  if(EncryptFileList->Text.Length()>1)//如果有文件能被加密
  ShowMessage("成功加密以下文件:\n"+EncryptFileList->Text);
  if(UnEncryptFileList->Text.Length()>1)//如果有文件不能被加密
  ShowMessage("以下文件加密失败:\n"+UnEncryptFileList->Text);
}
FileList->Items->Text=UnEncryptFileList->Text;
EncryptFileList->Free();
UnEncryptFileList->Free();

if(UseCompress->Checked)   //没有使用
  ShowMessage("成功创建 "+SaveDialog->FileName+".coco !\n请记住您使用的加密方式!");

TCloseAction *Action;
EncryptForm->FormClose(Sender,*Action);// 清除上一次的操作
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::DecryptFileClick(TObject *Sender)
{
DecryptForm->Show();
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::UseBanMoveClick(TObject *Sender)
{
if(UseBanMove->Checked)
 ShowMessage("在解密文件前,请不要格式化 C:");
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::FileFinderFileFound(TObject *Sender,
      AnsiString Directory, TSearchRec &SearchRec, bool &Stop)
{
FileList->Items->Add(SearchRec.Name);
}
//---------------------------------------------------------------------------

void __fastcall TEncryptForm::OpenAboutClick(TObject *Sender)
{
AboutForm->Show();
this->Close();        
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::AddShellClick(TObject *Sender)
{
AddShellForm->Show();
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::UseCompressClick(TObject *Sender)
{
if(UseCompress->Checked)
{
  SaveDialog->Execute();
  if(SaveDialog->FileName.Length()>1)
  UseCompress->Checked=true;
  if(SaveDialog->FileName.Length()<1)
  UseCompress->Checked=false;
}
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::AddFileClick(TObject *Sender)
{
TStringList *UnReadyFile = new TStringList;
OpenDialog->Execute();
if(OpenDialog->FileName.Length()>1)  //如果有选择到文件
{
for(int i=0;i<OpenDialog->Files->Count;i++)
{
 if(MyClass->IsReady(OpenDialog->Files->Strings[i]))//如果准备好
   FileList->Items->Add(OpenDialog->Files->Strings[i]);
 if(!MyClass->IsReady(OpenDialog->Files->Strings[i]))//如果没准备好
   UnReadyFile->Add(OpenDialog->Files->Strings[i]);
}}
if(UnReadyFile->Text.Length()>1)
ShowMessage("以下文件没有被选中,请检查这些文件的属性是否“只读”或正运行着:\n"+UnReadyFile->Text);
UnReadyFile->Free();
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::ShowHint(TObject * Sender)
{
  StatusBar->SimpleText=Application->Hint;
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::FormActivate(TObject *Sender)
{
 DragAcceptFiles (Handle, True) ;
Application->OnHint=ShowHint;
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::DeleteSelClick(TObject *Sender)
{
//删除所选 注:由于删除列表后,列表的索引会出现改变,所以需要从新扫描列表
for(int i=0;i<FileList->Items->Count;i++)
{//扫描列表
  if(FileList->Selected[i])
      {
          FileList->Items->Delete(i);
           DeleteSelClick(Sender);
      }
}
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::DeleteAllClick(TObject *Sender)
{
FileList->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::ViewHelpClick(TObject *Sender)
{
AnsiString Helpfile=ExtractFilePath(Application->ExeName)+"Help.CHM";//帮助文档的路径
ShellExecute(Handle,NULL,Helpfile.c_str(),NULL,NULL,SW_SHOWNORMAL);  //打开帮助文档
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::WMDropFiles (TWMDropFiles &message)
{
  TStringList *UnReadyFile = new TStringList;
  UINT filecount = DragQueryFile ((HDROP) message.Drop, 0xFFFFFFFF, NULL, 0) ;
  for (UINT ii = 0 ; ii < filecount ; ++ ii)
  {

    String filename ;
    filename.SetLength (MAX_PATH) ;
    int length = DragQueryFile ((HDROP) message.Drop,
                                 ii,
                                 filename.c_str (), filename.Length ()) ;
    filename.SetLength (length) ;
    if(MyClass->IsReady(filename))
     { FileList->Items->Add(filename);}
    if(!MyClass->IsReady(filename))
     { UnReadyFile->Add(filename);}
  }
if(UnReadyFile->Text.Length()>1)
ShowMessage("以下文件没有被选中,请检查这些文件的属性是否“只读”或正运行着:\n"+UnReadyFile->Text);
UnReadyFile->Free();
  DragFinish ((HDROP) message.Drop) ;
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::FormClose(TObject *Sender,
      TCloseAction &Action)   
{
  //----------------清除上一次的操作
FileList->Clear();
if(UseNormalEncrypt->Checked)//被选中时
{   UseNormalEncrypt->Checked=false;
    UseNormalEncrypt->OnClick(Sender);
}
if(UseLimitTime->Checked)//被选中时
{   UseLimitTime->Checked=false;
    UseLimitTime->OnClick(Sender);
}
if(UseBanMove->Checked)//被选中时
{   UseBanMove->Checked=false;
    UseBanMove->OnClick(Sender);}
if(UseCDVOL->Checked)//被选中时
{   UseCDVOL->Checked=false;
    UseCDVOL->OnClick(Sender);}
if(UseCompress->Checked)//被选中时
{   UseCompress->Checked=false;
    UseCompress->OnClick(Sender);}
AboutForm->Show();
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::ExitClick(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::SetupAllDeleteClick(TObject *Sender)
{
if(Application->MessageBoxA("<<灭文器 v1.00>>可以彻底地删除文件(即文件删除被恢复后也只是一堆乱码),更好地保证您文件的安全。\n是否想安装<<灭文器 v1.00>>到系统文件夹“发送到”?",Application->Title.c_str(),MB_YESNO)==IDYES)
{
PascalFun->LoadFromRes("AllDeleteEXE","ExeFile",PascalFun->GetSystemPath()+"\\灭文器 v1.00.exe");
ShowMessage("安装成功!您若想用<<灭文器 v1.00>>删除文件,就把选定的文件或文件夹发送到<<灭文器 v1.00>>。");
}
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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