📄 encryptformfile.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 + -