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

📄 mypropertypage.cpp

📁 mytoolpad 源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -