📄 mypropertypage.cpp
字号:
if(!IsDirExist(m_dir))
return;
SaveComments();
ReleaseMem();
UpdateData(TRUE);
m_aliasname=_T("");
m_comments=_T("");
UpdateData(FALSE);
struct _finddata_t FileBlock;
CString m_thisdir=m_dir;
int m_len=m_dir.GetLength();
char * m_buffer=m_dir.GetBuffer(m_len);
if(m_buffer[m_len-1]=='\\')
m_thisdir+=_T("*.*");
else
m_thisdir+=_T("\\*.*");
long handle=_findfirst(m_thisdir,&FileBlock);
int m_ret=0;
while(handle>0 && m_ret==0)
{
if(!(FileBlock.attrib&_A_SUBDIR))
m_fileslist.AddString(FileBlock.name);
m_ret=_findnext(handle,&FileBlock);
}
if(m_fileslist.GetCount()>0)
m_fileslist.SetCurSel(0);
AliasnameToPanel();
UpdateData(FALSE);
}
void CMyPropertyPage::AliasnameToPanel()
{
int m_len=m_dirname.GetLength();
char * m_dir=m_dirname.GetBuffer(m_len);
CString m_buffer=m_dirname;
if(m_dir[m_len-1]!='\\')
m_buffer+=_T("\\");
m_buffer+=_T("comment.son");
ReleaseMem();
if(FileExist(m_buffer))
{
CFile m_file;
if(m_file.Open(m_buffer,CFile::modeRead|CFile::typeBinary))
{
int m_number=0;
m_file.Read((char *)&m_number,sizeof(int));
for(int i=0;i<m_number;i++)
{
FILECOMMENT *m_this=new FILECOMMENT;
m_this->FromFile(m_file);
m_aliaslist.AddString(m_this->m_aliasname);
m_aliaslist.SetItemData(i,(DWORD)m_this);
}
m_file.Close();
}
OnSelchangeFilelist();
EnablePanel();
}
}
void CMyPropertyPage::CheckAliasValid()
{
int m_count=m_aliaslist.GetCount();
for(int i=0;i<m_count;i++)
{
if(AliasInAFilelist(i)==-1)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(i);
delete m_this;
m_aliaslist.DeleteString(i);
}
}
}
void CMyPropertyPage::SaveComments()
{
if(!IsDirExist(m_dirname))
return;
int m_number=m_aliaslist.GetCount();
if(m_number<=0)
return;
CheckAliasValid();
int m_len=m_dirname.GetLength();
char * m_dir=m_dirname.GetBuffer(m_len);
CString m_buffer=m_dirname;
if(m_dir[m_len-1]!='\\')
m_buffer+=_T("\\");
m_buffer+=_T("comment.son");
CFile m_file;
if(m_file.Open(m_buffer,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary))
{
m_file.Write((char *)&m_number,sizeof(int));
for(int i=0;i<m_number;i++)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(i);
m_this->ToFile(m_file);
}
m_file.Close();
}
}
void CMyPropertyPage::ReleaseMem()
{
int m_number=m_aliaslist.GetCount();
for(int i=0;i<m_number;i++)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(i);
delete m_this;
}
m_aliaslist.ResetContent();
}
BOOL CMyPropertyPage::IsDirExist(CString m_dir)
{
if(m_dir==_T(""))
return FALSE;
struct _finddata_t FileBlock;
CString m_thisdir=m_dir;
int m_len=m_dir.GetLength();
char * m_buffer=m_dir.GetBuffer(m_len);
if(m_buffer[m_len-1]=='\\')
m_thisdir+=_T("*.*");
else
m_thisdir+=_T("\\*.*");
long handle=_findfirst(m_thisdir,&FileBlock);
if(handle>0)
return TRUE;
return FALSE;
}
CString CMyPropertyPage::GetFileExtname(CString m_filename)
{
char *m_buffer=m_filename.GetBuffer(m_filename.GetLength());
char * m_ext=strrchr(m_buffer,'.');
return CString((char *)&m_ext[1]);
}
void CMyPropertyPage::SecretFile(CString filename,char *password)
{
SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL);
CFile m_file;
if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary))
{
char m_buffer[1001];
m_file.Read(m_buffer,1000);
if(strncmp(m_buffer,"柴银辉",6)==0)
{
m_file.Close();
return;
}
int m_len=strlen(password);
for(int i=0;i<1000;i++)
m_buffer[i]^=password[i%m_len];
m_len=m_file.GetLength();
if(m_len<1000)
{
m_file.SeekToEnd();
m_file.Write(m_buffer,1000-m_len);
}
m_file.SeekToEnd();
m_file.Write(m_buffer,1000);
memset(m_buffer,0,1001);
strcpy(m_buffer,"柴银辉");
int *data=(int *)&m_buffer[6];
data[0]=m_len;
data[1]=strlen(password);
strcpy((char *)&m_buffer[2*sizeof(int)+6],password);
m_file.SeekToBegin();
m_file.Write(m_buffer,1000);
m_file.Close();
}
}
BOOL CMyPropertyPage::UnSecretFile(CString filename,char *password)
{
SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL);
CFile m_file;
if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary))
{
char m_buffer[1001];
memset(m_buffer,0,1001);
m_file.Read(m_buffer,1000);
if(strncmp(m_buffer,"柴银辉",6)!=0)
{
m_file.Close();
return FALSE;
}
int *data=(int *)&m_buffer[6];
int m_len=data[1];
if((m_len!=(int)strlen(password)) || (strcmp((char *)&m_buffer[6+2*sizeof(int)],password)!=0))
{
m_file.Close();
return FALSE;
}
m_len=data[0];
long m_pos=m_file.Seek(-1000,CFile::end);
int m_number=m_file.Read(m_buffer,1000);
int m_passlen=strlen(password);
for(int i=0;i<1000;i++)
m_buffer[i]^=password[i%m_passlen];
m_file.SeekToBegin();
m_file.Write(m_buffer,1000);
m_file.SetLength(m_len);
m_file.Close();
return TRUE;
}
return FALSE;
}
void CMyPropertyPage::CreateExplain()
{
CString m_explain=m_dirname;
int m_len=m_dirname.GetLength();
char * m_dir=m_dirname.GetBuffer(m_len);
if(m_dir[m_len-1]=='\\')
m_explain+=_T("Readme.txt");
else
m_explain+=_T("\\Readme.txt");
CFile m_file;
if(m_file.Open(m_explain,CFile::modeCreate|CFile::modeWrite))
{
char * m_message="本目录下的所有文件已被柴银辉编写的工具加密,如果忘记密码,请与柴银辉联系!";
m_file.Write(m_message,strlen(m_message));
m_file.Close();
}
}
void CMyPropertyPage::DeleteExplain()
{
CString m_explain=m_dirname;
int m_len=m_dirname.GetLength();
char * m_dir=m_dirname.GetBuffer(m_len);
if(m_dir[m_len-1]=='\\')
m_explain+=_T("Readme.txt");
else
m_explain+=_T("\\Readme.txt");
DeleteFile(m_explain);
}
void CMyPropertyPage::ForbidUnsecFile(CString filename)
{
SetFileAttributes(filename,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL);
CFile m_file;
if(m_file.Open(filename,CFile::modeReadWrite|CFile::typeBinary))
{
char m_buffer[1001];
memset(m_buffer,0,1001);
m_file.Read(m_buffer,1000);
if(strncmp(m_buffer,"柴银辉",6)!=0)
{
m_file.Close();
return ;
}
int *data=(int *)&m_buffer[6];
char * password=(char *)&m_buffer[6+2*sizeof(int)];
int m_len=data[0];
long m_pos=m_file.Seek(-1000,CFile::end);
int m_number=m_file.Read(m_buffer,1000);
int m_passlen=data[1];
for(int i=0;i<1000;i++)
m_buffer[i]^=password[i%m_passlen];
m_file.SeekToBegin();
m_file.Write(m_buffer,1000);
m_file.SetLength(m_len);
m_file.Close();
}
}
BOOL CMyPropertyPage::ExistDataFile()
{
int m_len=m_dirname.GetLength();
char * m_dir=m_dirname.GetBuffer(m_len);
CString m_buffer=m_dirname;
if(m_dir[m_len-1]!='\\')
m_buffer+=_T("\\");
m_buffer+=_T("comment.son");
return FileExist(m_buffer);
}
void CMyPropertyPage::EnablePanel()
{
UpdateData(TRUE);
BOOL m_enable=(m_dirname!=_T("")) && IsDirExist(m_dirname);
m_passctrl.EnableWindow(m_enable);
m_filterctrl.EnableWindow(m_enable);
m_fileslist.EnableWindow(m_enable);
m_aliaslist.EnableWindow(m_enable);
m_enable=m_enable && (m_aliaslist.GetCurSel()>=0) && ExistDataFile();
m_comctrl.EnableWindow(m_enable);
m_sliasnamectrl.EnableWindow(m_enable);
m_enable=((m_dirname!=_T("")) && (m_password!=_T("")));
m_secctrl.EnableWindow(m_enable);
m_unsecctrl.EnableWindow(m_enable);
}
BOOL CMyPropertyPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
DirToPanel(m_dirname);
EnablePanel();
m_tooltip.Create(this);
m_tooltip.Activate(TRUE);
m_tooltip.AddTool(GetDlgItem(IDC_DIRNAME),"指定要处理的目录");
m_tooltip.AddTool(GetDlgItem(IDC_BROWSE),"搜索要处理的目录");
m_tooltip.AddTool(GetDlgItem(IDC_FILELIST),"指定目录下的文件列表");
m_tooltip.AddTool(GetDlgItem(IDC_ALIASLIST),"对应于文件列表的脚注列表");
m_tooltip.AddTool(GetDlgItem(IDC_PASSWORD),"加密该目录下所有文件的口令");
m_tooltip.AddTool(GetDlgItem(IDC_FILEFILTER),"除掉指定扩展名的文件");
m_tooltip.AddTool(GetDlgItem(IDC_SECRETALLFILES),"加密所有符合条件的文件");
m_tooltip.AddTool(GetDlgItem(IDC_UNSECRETALLFILES),"解密所有文件");
m_tooltip.AddTool(GetDlgItem(IDC_ALIASNAME),"为指定文件加入别名");
m_tooltip.AddTool(GetDlgItem(IDC_DESTINATION),"说明指定文件的用途");
return TRUE;
}
void CMyPropertyPage::OnChangePassword()
{
if(m_notinit)
return ;
EnablePanel();
}
void CMyPropertyPage::OnDblclkFilelist()
{
char m_name[161];
int m_index=m_fileslist.GetCurSel();
if(m_index>=0)
{
m_fileslist.GetText(m_index,m_name);
if(FileInAliaslist(m_name)!=-1)
{
MakeTheSameList(1);
NItemToPanel();
}
else
{
FILECOMMENT *m_this=new FILECOMMENT;
strcpy(m_this->m_filename,m_name);
m_index=m_aliaslist.AddString(m_this->m_aliasname);
m_aliaslist.SetCurSel(m_index);
m_aliaslist.SetItemData(m_index,(DWORD)m_this);
NItemToPanel();
EnablePanel();
}
EnablePanel();
GotoDlgCtrl(&m_sliasnamectrl);
}
}
void CMyPropertyPage::OnOK()
{
SaveComments();
ReleaseMem();
CPropertyPage::OnOK();
}
BOOL CMyPropertyPage::OnKillActive()
{
if(!m_notinit)
SaveComments();
return CPropertyPage::OnKillActive();
}
void CMyPropertyPage::OnDblclkAliaslist()
{
EnablePanel();
GotoDlgCtrl(&m_sliasnamectrl);
}
BOOL CMyPropertyPage::PreTranslateMessage(MSG* pMsg)
{
m_tooltip.RelayEvent(pMsg);
return CPropertyPage::PreTranslateMessage(pMsg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -