?? encryptformfile.cpp
字號(hào):
//---------------------------------------------------------------------------
#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函數(shù)的類
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表示不使用“限時(shí)加密”
{
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) //嘗試檢測(cè)光盤
ShowMessage("在解密文件前,請(qǐng)妥善保管這張光盤");
else{
ShowMessage("請(qǐng)把光盤插進(jìn)光驅(qū)里!");
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("請(qǐng)先查找欲加密的文件!");
return;
}
if(Password->Text!=Repeat->Text)
{
ShowMessage("輸入的密碼與重復(fù)的密碼不符!");
return;
}
if(ST->Value>ET->Value)
{
ShowMessage("限制解密的時(shí)間不能從大到小!");
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(); //彈出對(duì)話框前關(guān)閉提示
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("成功創(chuàng)建 "+SaveDialog->FileName+".coco !\n請(qǐng)記住您使用的加密方式!");
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("在解密文件前,請(qǐng)不要格式化 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]))//如果準(zhǔn)備好
FileList->Items->Add(OpenDialog->Files->Strings[i]);
if(!MyClass->IsReady(OpenDialog->Files->Strings[i]))//如果沒準(zhǔn)備好
UnReadyFile->Add(OpenDialog->Files->Strings[i]);
}}
if(UnReadyFile->Text.Length()>1)
ShowMessage("以下文件沒有被選中,請(qǐng)檢查這些文件的屬性是否“只讀”或正運(yùn)行著:\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)
{
//刪除所選 注:由于刪除列表后,列表的索引會(huì)出現(xiàn)改變,所以需要從新掃描列表
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("以下文件沒有被選中,請(qǐng)檢查這些文件的屬性是否“只讀”或正運(yùn)行著:\n"+UnReadyFile->Text);
UnReadyFile->Free();
DragFinish ((HDROP) message.Drop) ;
}
//---------------------------------------------------------------------------
void __fastcall TEncryptForm::FormClose(TObject *Sender,
TCloseAction &Action)
{
//----------------清除上一次的操作
FileList->Clear();
if(UseNormalEncrypt->Checked)//被選中時(shí)
{ UseNormalEncrypt->Checked=false;
UseNormalEncrypt->OnClick(Sender);
}
if(UseLimitTime->Checked)//被選中時(shí)
{ UseLimitTime->Checked=false;
UseLimitTime->OnClick(Sender);
}
if(UseBanMove->Checked)//被選中時(shí)
{ UseBanMove->Checked=false;
UseBanMove->OnClick(Sender);}
if(UseCDVOL->Checked)//被選中時(shí)
{ UseCDVOL->Checked=false;
UseCDVOL->OnClick(Sender);}
if(UseCompress->Checked)//被選中時(shí)
{ 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>>可以徹底地刪除文件(即文件刪除被恢復(fù)后也只是一堆亂碼),更好地保證您文件的安全。\n是否想安裝<<滅文器 v1.00>>到系統(tǒng)文件夾“發(fā)送到”?",Application->Title.c_str(),MB_YESNO)==IDYES)
{
PascalFun->LoadFromRes("AllDeleteEXE","ExeFile",PascalFun->GetSystemPath()+"\\滅文器 v1.00.exe");
ShowMessage("安裝成功!您若想用<<滅文器 v1.00>>刪除文件,就把選定的文件或文件夾發(fā)送到<<滅文器 v1.00>>。");
}
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -