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

📄 locku.cpp

📁 将其他文件隐藏在BMP图像中!好
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   //开始执行
/////////////////////////////////////////////////////////////
	fread(byte_bufs,8,1,OriginFileP);
	while( (len<ObjectFileLen) && (!feof(OriginFileP)) )
	{	//将位图阵列每字节的最低位重新组合为被隐藏文件的字节
        byte_buf=0;
		for(i=0;i<8;i++)
		{
			if( (byte_bufs[i] & 1) == 1)
				byte_buf|=mask[i];
		}//end for
        byte_buf^=Password[j];
		fputc(byte_buf,TempFileP);
        len++;
        j++;
        if(j>=PasswordLen) j=0;
		fread(byte_bufs,8,1,OriginFileP);
        ProgressBar1->StepIt();
        Application->ProcessMessages();
        if(Stop)	return false;
    }//end  while

   return false;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

void __fastcall TMainForm::RunBitClick(TObject *Sender)
{
//////////////////////////////////////////////////////////////////////////
//主控程序
	if( MessageDlg("确定要执行\""+RadioGroup1->Items->Strings
    		[RadioGroup1->ItemIndex]+"\"吗?",mtConfirmation,
            TMsgDlgButtons()<<mbOK<<mbCancel,0)==mrOk){
    	Memo1->Clear();
    	Memo1->Lines->Add("操作方式选择:"+RadioGroup1->Items->
        		Strings[RadioGroup1->ItemIndex]);
    }
    else
    	return;
////////////加密各项操作方式初始化
//检查原文件是否存在和目标文件名是否为空
 //获得文件全路径,如果为空
 //ShowMessage(OriginFileName);测试成功,OriginFileName为空
 //设置当前工作目录为DirectoryListBox1->Directory,无用->有用
 SetCurrentDir(DirectoryListBox1->Directory);
 OriginFileName=ExpandFileName(FromFile->Text);//获取目标文件全路径
//////////如果打开原文件失败
 if(OriginFileName.IsEmpty()){//文件名为空请示输入文件名
     MessageDlg("请先输入原文件名!",mtError,
        TMsgDlgButtons()<<mbOK,0);
     FromFile->SetFocus();
     return;
  }
  if(!FileExists(OriginFileName)){//文件不存在
     MessageDlg("原文件\""+OriginFileName+"\"不存在",mtError,
         TMsgDlgButtons()<<mbOK,0);
     FromFile->SetFocus();
     return;
  }
 //设置当前工作目录为DirectoryListBox2->Directory,无用->有用
 SetCurrentDir(DirectoryListBox2->Directory);//
 ObjectFileName=ExpandFileName(ToFile->Text);//获取目标文件全路径
   //如果目标文件为空,提示创建新文件
   if(ObjectFileName.IsEmpty()){
   		MessageDlg("请先输入目标文件名!",mtWarning,
   			TMsgDlgButtons()<<mbOK,0);
     	ToFile->SetFocus();
     	return;
   }
   //打开原文件
   if( (OriginFileP= fopen(OriginFileName.c_str(),"rb") )==NULL){
       MessageDlg("不能打开原文件\""+OriginFileName+"\"",mtError,
               TMsgDlgButtons()<<mbOK,0);
       FromFile->SetFocus();
       return;
   }

    if(ExtractFileName(ObjectFileName).IsEmpty()) {
    	MessageDlg("请输入文件名!",mtWarning,TMsgDlgButtons()<<mbOK,0);
        fclose(OriginFileP);
        return;
    }
	if( RadioGroup1->ItemIndex!=2){
    	AnsiString Path=ExtractFilePath(ObjectFileName);
        AnsiString Dir=ExtractFileDir(ObjectFileName);
        if(chdir(Path.c_str())){
        	int Result=MessageDlg("路径\""+Path+"\"不存在,是否创建该目录?",
            		mtWarning,TMsgDlgButtons()<<mbYes<<mbNo<<mbCancel,0);
            switch(Result){
            	case mrYes:
                   	while(chdir(Dir.c_str()) ){
                    	Dir=ExtractFileDir(Dir);
                    }
                    do{
                    	Dir=Dir+ObjectFileName.SubString(  Dir.Length()+1,
                          Path.SubString( Dir.Length()+1,Path.Length() ).Pos('\\')  );
                        mkdir(Dir.c_str());
                    }while(!(Dir==Path));
                    DirectoryListBox2->Directory=Dir;
                    DirectoryListBox2->Update();
                    break;
                case mrNo: ToFile->SetFocus();
                case mrCancel:  fclose(OriginFileP);return;
            }
        }
    }
   /*if(!FileExists(ObjectFileName)){
       MessageDlg("目标文件\""+ObjectFileName+"\"不存在",mtError,
              TMsgDlgButtons()<<mbOK,0);
       ToFile->SetFocus();
       return;
   }*/
   //获取文件长度
   findfirst(OriginFileName.c_str(),&ff,0);
   OriginFileLen=ff.ff_fsize;
   findfirst(ObjectFileName.c_str(),&ff,0);
   ObjectFileLen=ff.ff_fsize;
   //创建临时文件名改原文件扩展名为"tmp"
   TempFileName=ObjectFileName+".tmp";
////////////////////////////////////////////////////////////////
//调用各项功能
////////////如果确定密码,开始执行加密程序初始化,否则返回
	if(!GetPassword())return;
    bool ErrorReturn;
    //StopBit->Enabled=true;
    RunBit->Enabled=false;
    switch(RadioGroup1->ItemIndex){
        case 0:  ErrorReturn=DirectPut();   break;
        case 1:  ErrorReturn=DirectGet();   break;
        case 2:  ErrorReturn=AddToBmp24();  break;
        case 3:  ErrorReturn=ExtFromBmp24();break;
    }
    //StopBit->Enabled=false;
    RunBit->Enabled=true;
/////////////////////////////////////////////////////////////////
//收尾工作,释放变量所占用的内存
	fclose(OriginFileP);
	fclose(ObjectFileP);
    fclose(TempFileP);
    if(ErrorReturn){
    	Memo1->Lines->Add("执行失败");
        return;
    }
	delete Password; //也就是说初始化未成功,直接返回
	delete CoolWord; //否则删除指针变量,继续执行
	ProgressBar1->Position=0;
/////////判断是用户停止还是正常执行完毕
   if(Stop){//如果是用户停止操作删除临时的文件
       StatusBar1->Panels->Items[0]->Text="用户停止";
       DeleteFile(TempFileName);
       Memo1->Lines->Add("用户停止");
       return;
   }
   else {//删除原文件//将临时文件改名为原文件
       DeleteFile(ObjectFileName);
       RenameFile(TempFileName,ObjectFileName);
       StatusBar1->Panels->Items[0]->Text="成功";
   }

/////////////////////////加密完毕,更新目录文件
   if(DriveComboBox2->Drive != OriginFileName[1]){
        DriveComboBox2->Drive=OriginFileName[1];
        DriveComboBox1->Update();
   }
   if(DirectoryListBox1->Directory!=ExtractFileDir(OriginFileName)){
        DirectoryListBox1->Directory=ExtractFileDir(OriginFileName);
        DirectoryListBox1->Update();
   }
   /*if(FileListBox1->FileName!=OriginFileName){
        FileListBox1->FileName=OriginFileName;
   }*/
   //因为可能创建了一个新的目标文件
   FileListBox1->Update();
   if(DriveComboBox2->Drive!=ObjectFileName[1]){
        DriveComboBox2->Drive=ObjectFileName[1];
        DriveComboBox2->Update();
   }
   if(DirectoryListBox2->Directory!=ExtractFileDir(ObjectFileName)){
        DirectoryListBox2->Directory=ExtractFileDir(ObjectFileName);
        DirectoryListBox2->Update();
   }
   /*if(FileListBox2->FileName!=ObjectFileName){
        FileListBox2->FileName=ObjectFileName;
        FileListBox2->Update();
   }*/
   FileListBox2->Update();
///////////////////获取目标文件长度
	findfirst(OriginFileName.c_str(),&ff,0);
	OriginFileLen=ff.ff_fsize;
	findfirst(ObjectFileName.c_str(),&ff,0);
	ObjectFileLen=ff.ff_fsize;
//////////////////////////////////显示加密信息
	Memo1->Lines->Add("原始文件: "+OriginFileName+"  "
			+FormatFloat((AnsiString)"#,##0'KB '",OriginFileLen/1024)
			+FormatFloat((AnsiString)"(#,##0' 字节)'",OriginFileLen));
	Memo1->Lines->Add("目标文件: "+ObjectFileName+"\t"
			+FormatFloat((AnsiString)"#,##0'KB '",ObjectFileLen/1024)
			+FormatFloat((AnsiString)"(#,##0' 字节)'",ObjectFileLen));
//获取本地当前时间
   time_t t;
   struct tm *mt;//定义一个tm型指针
   t=time(NULL);//
   mt=localtime(&t);//把r转化为tm结构
   AnsiString Time;
   Time=AnsiString(mt->tm_year+1900)+"-"+AnsiString(mt->tm_mon+1)
        +"-"+AnsiString(mt->tm_mday)+"  "+AnsiString(mt->tm_hour)
        +":"+AnsiString(mt->tm_min)+":"+AnsiString(mt->tm_sec);
   Time=StatusBar1->Panels->Items[0]->Text+": "+Time;
   Memo1->Lines->Add(Time);
   Memo1->SelStart=0;
   Memo1->SelLength=0;
/////////////////////////////////////////////////////////////////
//终于搞定了
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::StopBitClick(TObject *Sender)
{
if(ProgressBar1->Position!=0){
   if(MessageDlg("放弃本次的操作吗?",mtConfirmation,
          TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes){
        Stop=true;
   }
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
{
HelpForm=new THelpForm(Application);
HelpForm->ShowModal();
delete HelpForm;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::NewFolderBitClick(TObject *Sender)
{
if(NewFolderDlg->ShowModal()==mrOk){
   SetCurrentDir(DirectoryListBox2->Directory);
   if(!CreateDir(NewFolderDlg->NewFolder->Text)){
       //如果创建目录出错,提示后返回
       MessageDlg("创建目录出错!",mtError,TMsgDlgButtons()<<mbOK,0);
       return;
   }
   DirectoryListBox2->Update();
   DirectoryListBox1->Update();
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
StatusBar1->Panels->Items[0]->Text=
    StatusBar1->Panels->Items[0]->Text+".";
}
//---------------------------------------------------------------------------



void __fastcall TMainForm::FileListBox1Click(TObject *Sender)
{
FromFile->Text=FileListBox1->FileName;    
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FileListBox2Click(TObject *Sender)
{
ToFile->Text=FileListBox2->FileName;    
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ComboBox1Change(TObject *Sender)
{
FileListBox1->Mask=ComboBox1->Text;
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::ComboBox2Change(TObject *Sender)
{
FileListBox2->Mask=ComboBox2->Text;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ExitBitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::RadioGroup1Click(TObject *Sender)
{
switch(RadioGroup1->ItemIndex){
    case 0:
    case 1:
         ComboBox1->ItemIndex=2;
         ComboBox2->ItemIndex=2;
         FileListBox1->Mask="*.*";
         FileListBox2->Mask="*.*";
         break;
    case 2:
         ComboBox1->ItemIndex=2;
         ComboBox2->ItemIndex=1;
         FileListBox1->Mask="*.*";
         FileListBox2->Mask="*.BMP";
         break;
    case 3:
         ComboBox1->ItemIndex=1;
         ComboBox2->ItemIndex=2;
         FileListBox1->Mask="*.BMP";
         FileListBox2->Mask="*.*";
         break;
}
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::RefreshBitClick(TObject *Sender)
{
DirectoryListBox1->Update();
DirectoryListBox2->Update();
FileListBox1->Update();
FileListBox2->Update();    
}
//---------------------------------------------------------------------------


void __fastcall TMainForm::FileListBox1DblClick(TObject *Sender)
{
if(!CurrentFLB->FileName.IsEmpty())
{
	OleContainer1->CreateLinkToFile(CurrentFLB->FileName,false);
	OleContainer1->DoVerb(0);
}
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FileListBox1MouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
CurrentFLB=(TFileListBox *)Sender;	
}
//---------------------------------------------------------------------------



void __fastcall TMainForm::OpenClick(TObject *Sender)
{
OleContainer1->CreateLinkToFile(CurrentFLB->FileName,false);
OleContainer1->DoVerb(0);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::DeleteClick(TObject *Sender)
{
if( (MessageDlg("文件\""+CurrentFLB->FileName+"\"将被永久删除,继续吗?",
		mtWarning,TMsgDlgButtons()<<mbOK<<mbCancel,0))==mrOk){
	DeleteFile(CurrentFLB->FileName);
    FileListBox1->Update();
    FileListBox2->Update();
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::PopupMenu1Popup(TObject *Sender)
{
if(CurrentFLB->FileName.IsEmpty()){
	Open->Enabled=false;
    Delete->Enabled=false;
}
else{
	Open->Enabled=true;
    Delete->Enabled=true;
}
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
{
//当正在执行时询问是否中止当前的操作
if(ProgressBar1->Position!=0){
    if(MessageDlg("放弃本次的操作吗?",mtConfirmation,
          TMsgDlgButtons()<<mbYes<<mbNo,0)==mrYes){
        fclose(OriginFileP);
        fclose(ObjectFileP);
        fclose(TempFileP);
        DeleteFile(TempFileName);
       	delete Password; //也就是说初始化未成功,直接返回
    	delete CoolWord; //否则删除指针变量,继续执行
        Stop=true;
    }
    else CanClose=false;
}
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FromFileKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==0x0D)RunBitClick(Sender);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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