📄 mypropertypage.cpp
字号:
#include "stdafx.h"
#include "io.h"
#include "string.h"
#include "mytoolpad.h"
#include "shlobj.h"
#include "MyPropertyPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int WINAPI BrowseProc( HWND hwnd, UINT uMsg, LPARAM lParam,LPARAM lpData) ;
IMPLEMENT_DYNCREATE(CMyPropertyPage, CPropertyPage)
CMyPropertyPage::CMyPropertyPage() : CPropertyPage(CMyPropertyPage::IDD)
{
//{{AFX_DATA_INIT(CMyPropertyPage)
m_dirname = _T("");
m_password = _T("");
m_aliasname = _T("");
m_comments = _T("");
m_filter = _T("");
//}}AFX_DATA_INIT
m_notinit=TRUE;
m_dirname=AfxGetApp()->GetProfileString("系统配置","加密目录名","");
m_filter=AfxGetApp()->GetProfileString("系统配置","文件过滤器","*.son");
}
CMyPropertyPage::~CMyPropertyPage()
{
AfxGetApp()->WriteProfileString("系统配置","加密目录名",m_dirname);
AfxGetApp()->WriteProfileString("系统配置","文件过滤器",m_filter);
}
void CMyPropertyPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyPropertyPage)
DDX_Control(pDX, IDC_BROWSE, m_ctrl1);
DDX_Control(pDX, IDC_FILEFILTER, m_filterctrl);
DDX_Control(pDX, IDC_DESTINATION, m_comctrl);
DDX_Control(pDX, IDC_ALIASNAME, m_sliasnamectrl);
DDX_Control(pDX, IDC_UNSECRETALLFILES, m_unsecctrl);
DDX_Control(pDX, IDC_SECRETALLFILES, m_secctrl);
DDX_Control(pDX, IDC_PASSWORD, m_passctrl);
DDX_Control(pDX, IDC_FILELIST, m_fileslist);
DDX_Control(pDX, IDC_ALIASLIST, m_aliaslist);
DDX_Text(pDX, IDC_DIRNAME, m_dirname);
DDX_Text(pDX, IDC_PASSWORD, m_password);
DDX_Text(pDX, IDC_ALIASNAME, m_aliasname);
DDV_MaxChars(pDX, m_aliasname, 40);
DDX_Text(pDX, IDC_DESTINATION, m_comments);
DDV_MaxChars(pDX, m_comments, 200);
DDX_Text(pDX, IDC_FILEFILTER, m_filter);
//}}AFX_DATA_MAP
m_notinit=FALSE;
}
BEGIN_MESSAGE_MAP(CMyPropertyPage, CPropertyPage)
//{{AFX_MSG_MAP(CMyPropertyPage)
ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
ON_EN_CHANGE(IDC_DIRNAME, OnChangeDirname)
ON_LBN_SELCHANGE(IDC_FILELIST, OnSelchangeFilelist)
ON_LBN_SELCHANGE(IDC_ALIASLIST, OnSelchangeAliaslist)
ON_EN_CHANGE(IDC_ALIASNAME, OnChangeAliasname)
ON_EN_CHANGE(IDC_DESTINATION, OnChangeDestination)
ON_BN_CLICKED(IDC_SECRETALLFILES, OnSecretallfiles)
ON_BN_CLICKED(IDC_UNSECRETALLFILES, OnUnsecretallfiles)
ON_EN_CHANGE(IDC_PASSWORD, OnChangePassword)
ON_LBN_DBLCLK(IDC_FILELIST, OnDblclkFilelist)
ON_LBN_DBLCLK(IDC_ALIASLIST, OnDblclkAliaslist)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
int WINAPI BrowseProc(HWND hwnd,UINT msg,LPARAM lParam,LPARAM lpData)
{
switch( msg)
{
case BFFM_INITIALIZED:
SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)"TORONTO");
SendMessage(hwnd,BFFM_SETSELECTION,1,(LPARAM)"C:\\");
break ;
case BFFM_SELCHANGED:
SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)"TORONTO");
break ;
}
return FALSE ;
}
void CMyPropertyPage::OnBrowse()
{
ITEMIDLIST *m_dirs,*m_suc;
SHGetSpecialFolderLocation(GetSafeHwnd(),CSIDL_DESKTOP,&m_dirs);
BROWSEINFO m_info;
m_info.hwndOwner=GetSafeHwnd();
m_info.pidlRoot=m_dirs;
m_info.pszDisplayName="c:\\";
m_info.lpszTitle="请您选择目录:";
m_info.ulFlags=0;
m_info.lpfn=BrowseProc;
m_info.lParam=0;
m_info.iImage=0;
m_suc=SHBrowseForFolder(&m_info);
if(m_suc)
{
SaveComments();
char m_buffer[MAX_PATH];
SHGetPathFromIDList(m_suc,m_buffer);
m_dirname=_T(m_buffer);
UpdateData(FALSE);
}
DirToPanel(m_dirname);
EnablePanel();
}
void CMyPropertyPage::OnChangeDirname()
{
if(m_notinit)
return ;
DirToPanel(m_dirname);
EnablePanel();
}
void CMyPropertyPage::OnSelchangeFilelist()
{
if(m_notinit)
return ;
MakeTheSameList(1);
NItemToPanel();
EnablePanel();
}
void CMyPropertyPage::OnSelchangeAliaslist()
{
if(m_notinit)
return ;
MakeTheSameList(2);
NItemToPanel();
}
void CMyPropertyPage::NItemToPanel()
{
int m_index=m_aliaslist.GetCurSel();
if(m_index>=0)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(m_index);
m_aliasname=_T(m_this->m_aliasname);
m_comments=_T(m_this->m_comments);
}
else
{
m_aliasname=_T("本项尚无别名");
m_comments=_T("本项尚无注释信息");
}
UpdateData(FALSE);
}
void CMyPropertyPage::MakeTheSameList(int m_direct)
{
char m_name1[161];
int m_index;
switch(m_direct)
{
case 1: //从文件到别名
m_index=m_fileslist.GetCurSel();
m_fileslist.GetText(m_index,m_name1);
m_index=FileInAliaslist(m_name1);
m_aliaslist.SetCurSel(m_index);
break;
case 2: //从别名到文件
m_index=m_aliaslist.GetCurSel();
m_index=AliasInAFilelist(m_index);
m_fileslist.SetCurSel(m_index);
break;
}
UpdateData(FALSE);
}
int CMyPropertyPage::AliasInAFilelist(int m_index)
{
int m_number=m_fileslist.GetCount();
char m_name[161];
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(m_index);
for(int i=0;i<m_number;i++)
{
m_fileslist.GetText(i,m_name);
if(strcmpi(m_this->m_filename,m_name)==0)
{
m_index=i;
break;
}
}
return m_index;
}
int CMyPropertyPage::FileInAliaslist(char * m_filename)
{
int m_index=-1;
int m_number=m_aliaslist.GetCount();
for(int i=0;i<m_number;i++)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(i);
if(strcmpi(m_filename,m_this->m_filename)==0)
{
m_index=i;
break;
}
}
return m_index;
}
void CMyPropertyPage::OnChangeAliasname()
{
if(m_notinit)
return ;
UpdateData(TRUE);
int m_index=m_aliaslist.GetCurSel();
if(m_index>=0)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(m_index);
memset(m_this->m_aliasname,0,41);
strcpy(m_this->m_aliasname,m_aliasname);
m_aliaslist.DeleteString(m_index);
m_aliaslist.InsertString(m_index,m_this->m_aliasname);
m_aliaslist.SetCurSel(m_index);
m_aliaslist.SetItemData(m_index,(DWORD)m_this);
}
}
void CMyPropertyPage::OnChangeDestination()
{
if(m_notinit)
return ;
UpdateData(TRUE);
int m_index=m_aliaslist.GetCurSel();
if(m_index>=0)
{
FILECOMMENT *m_this=(FILECOMMENT *)m_aliaslist.GetItemData(m_index);
memset(m_this->m_comments,0,201);
strcpy(m_this->m_comments,m_comments);
}
}
void CMyPropertyPage::SecretDirectory(CString m_dir,char * m_pass)
{
struct _finddata_t FileBlock;
CString m_fullname,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("\\");
long handle=_findfirst(m_thisdir+_T("*.*"),&FileBlock);
int m_ret=0;
while(handle>0 && m_ret==0)
{
m_fullname=m_thisdir+_T(FileBlock.name);
if(FileBlock.attrib&_A_SUBDIR)
{
if(strcmp(FileBlock.name,".")!=0 && strcmp(FileBlock.name,"..")!=0)
SecretDirectory(m_fullname,m_pass);
}
else
{
CString m_ext=GetFileExtname(m_fullname);
if(m_filter.Find(m_ext)==-1)
SecretFile(m_fullname,m_pass);
}
m_ret=_findnext(handle,&FileBlock);
}
}
void CMyPropertyPage::UnSecretDirectory(CString m_dir,char * m_pass)
{
struct _finddata_t FileBlock;
CString m_fullname,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("\\");
long handle=_findfirst(m_thisdir+_T("*.*"),&FileBlock);
int m_ret=0;
while(handle>0 && m_ret==0)
{
m_fullname=m_thisdir+_T(FileBlock.name);
if(FileBlock.attrib&_A_SUBDIR)
{
if(strcmp(FileBlock.name,".")!=0 && strcmp(FileBlock.name,"..")!=0)
UnSecretDirectory(m_fullname,m_pass);
}
else
{
if(strcmpi(FileBlock.name,"readme.txt")!=0)
{
if(!UnSecretFile(m_fullname,m_pass))
{
CString m_errormsg=_T("解压文件\"");
m_errormsg+=m_fullname;
m_errormsg+=_T("\"失败!\n是否继续?");
if(MessageBox(m_errormsg,"错误警告",MB_YESNO)==IDNO)
break;
}
}
}
m_ret=_findnext(handle,&FileBlock);
}
}
void CMyPropertyPage::ForbidUnsecDirectory(CString m_dir)
{
struct _finddata_t FileBlock;
CString m_fullname,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("\\");
long handle=_findfirst(m_thisdir+_T("*.*"),&FileBlock);
int m_ret=0;
while(handle>0 && m_ret==0)
{
m_fullname=m_thisdir+_T(FileBlock.name);
if(FileBlock.attrib&_A_SUBDIR)
{
if(strcmp(FileBlock.name,".")!=0 && strcmp(FileBlock.name,"..")!=0)
ForbidUnsecDirectory(m_fullname);
}
else
ForbidUnsecFile(m_fullname);
m_ret=_findnext(handle,&FileBlock);
}
}
void CMyPropertyPage::OnSecretallfiles()
{
UpdateData(TRUE);
if(IsDirExist(m_dirname))
{
SecretDirectory(m_dirname,m_password.GetBuffer(m_password.GetLength()));
CreateExplain();
MessageBox("整个目录下的所有文件加密成功!","恭喜恭喜",MB_OK);
}
else
MessageBox("请您现在左边输入完整路径名,然后再试!","操作错误");
}
void CMyPropertyPage::OnUnsecretallfiles()
{
UpdateData(TRUE);
if(IsDirExist(m_dirname))
{
if(GetKeyState(VK_SHIFT)<0)
ForbidUnsecDirectory(m_dirname);
else
UnSecretDirectory(m_dirname,m_password.GetBuffer(m_password.GetLength()));
DeleteExplain();
MessageBox("整个目录下的所有文件解密完成,如果没有实际\n解密,那么是口令不对!请E_Mail to :cyh_c@263.net!","恭喜恭喜",MB_OK);
}
else
MessageBox("请您现在左边输入完整路径名,然后再试!","操作错误");
}
BOOL CMyPropertyPage::FileExist(CString filename)
{
BOOL ret=FALSE;
if(filename==_T(""))
return ret;
HANDLE file=CreateFile(filename,0,FILE_SHARE_READ,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(file!=INVALID_HANDLE_VALUE)
{
CloseHandle(file);
ret=TRUE;
}
return ret;
}
void CMyPropertyPage::DirToPanel(CString m_dir)
{
m_fileslist.ResetContent();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -