www.pudn.com > FindMails.rar > LocalFind.cpp


// LocalFind.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "findemail.h" 
#include "LocalFind.h" 
#include "FindEmailDlg.h" 
#include "folder_dialog2.h" 
#include "buy.h" 
#include "buyfindmail.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
extern CString Product_Id; 
///////////////////////////////////////////////////////////////////////////// 
// CLocalFind dialog 
UINT FindLocalThread(LPVOID param); 
UINT StatusThread(LPVOID param); 
 
CLocalFind::CLocalFind(CWnd* pParent /*=NULL*/) 
	: CDialog(CLocalFind::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CLocalFind) 
	m_DirPath = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void CLocalFind::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CLocalFind) 
	DDX_Control(pDX, IDC_SearchSize, m_SearchSize); 
	DDX_Control(pDX, IDC_Status, m_Status); 
	DDX_Control(pDX, IDOK, m_Find); 
	DDX_Control(pDX, IDCANCEL, m_Cancel); 
	DDX_Control(pDX, IDC_BUTTONSave, m_Save); 
	DDX_Control(pDX, IDC_BUTTON1, m_Folder); 
	DDX_Control(pDX, IDC_TotalMail, m_Total); 
	DDX_Control(pDX, IDC_LIST1, m_MailList); 
	DDX_Text(pDX, IDC_EDIT1, m_DirPath); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CLocalFind, CDialog) 
	//{{AFX_MSG_MAP(CLocalFind) 
	ON_BN_CLICKED(IDOK, OnFind) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButtonSelect) 
	ON_BN_CLICKED(IDC_BUTTONSave, OnBUTTONSave) 
	ON_BN_CLICKED(IDC_StopButton, OnStopButton) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CLocalFind message handlers 
 
void CLocalFind::OnFind()  
{ 
	// TODO: Add your control notification handler code here 
	StopSign=false; 
	m_Folder.EnableWindow(false); 
	m_Find.EnableWindow(false); 
	m_Save.EnableWindow(false); 
	m_Cancel.EnableWindow(false); 
	AfxBeginThread(FindLocalThread,(LPVOID)this,THREAD_PRIORITY_HIGHEST);	 
	AfxBeginThread(StatusThread,(LPVOID)this,THREAD_PRIORITY_NORMAL);	 
 
} 
 
void CLocalFind::OnButtonSelect()  
{ 
	// TODO: Add your control notification handler code here 
 
	CString path; 
	CFolderDialog dlg; 
	if(dlg.DoModal()==IDOK) 
	{ 
		path=dlg.GetPathName(); 
		if(path.GetLength()==3)m_DirPath=path; 
		else m_DirPath=path+"\\"; 
		UpdateData(false); 
	} 
 
	 
} 
 
void CLocalFind::OnBUTTONSave()  
{ 
	// TODO: Add your control notification handler code here 
	/*AfxMessageBox("Sorry!This is Demo.Can't Save!Buy Now!"); 
	CBuy buydlg; 
	buydlg.DoModal();*/ 
	CString MachineNum; 
	char hostname[80]; 
	gethostname(hostname,80); 
	MachineNum.Format("%s%d%d%d%d",hostname,_osver,_winmajor,_winminor 
		,_winver); 
	MachineNum.MakeLower(); 
	if(MachineNum!=Product_Id) 
	{ 
		AfxMessageBox("The Product ID Incorrect!Can't Save!Buy it Now!"); 
		CBuyFindMail buydlg; 
		buydlg.DoModal(); 
		return; 
	} 
 
	if(m_MailList.GetItemCount()<=0)return; 
	CFile SaveFile; 
	CString temp; 
	CFileDialog dlg(false,"txt","*.txt",OFN_PATHMUSTEXIST,"*.txt",NULL); 
	if(dlg.DoModal()==IDOK) 
	{ 
		CString m_filename,data,Total_c; 
		m_filename=dlg.GetFileName(); 
		if(!SaveFile.Open(m_filename,CFile::modeCreate|CFile::modeReadWrite))AfxMessageBox("Can't open this file"); 
		for(int i=0;i<=m_MailList.GetItemCount();i++) 
		{ 
			temp=m_MailList.GetItemText(i,0); 
			SaveFile.Write(temp,temp.GetLength()); 
			SaveFile.Write("\r\n",2); 
		} 
		SaveFile.Close(); 
		AfxMessageBox("Save Ok"); 
	} 
	 
} 
 
void CLocalFind::OnCancel()  
{ 
	// TODO: Add extra cleanup here 
	 
	CDialog::OnCancel(); 
} 
 
BOOL CLocalFind::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
	Sizes=0; 
	Sizes=0.1; 
	m_DirPath="C:\\WINDOWS\\Application Data\\Identities\\"; 
	UpdateData(false); 
	StopSign=false; 
	FCount=0; 
	m_MailList.InsertColumn(0,"Mail Address",LVCFMT_LEFT,160,NULL); 
	MailCount=0; 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CLocalFind::Findallfile(CString strParent) 
{ 
  CFileFind find; 
  char Buf[BufSize]; 
  CFile SFile; 
  CString filesize; 
  BOOL bFind = find.FindFile(strParent + "*.*"); 
  while(bFind) 
  { 
    bFind = find.FindNextFile(); 
    if(find.IsDots()) continue; 
    if(find.IsDirectory()) 
    { 
		Findallfile(strParent + find.GetFileName() + "\\"); 
    } 
	else 
	{ 
		FilePath=find.GetFilePath(); 
		if(FilePath.Find(".exe")!=-1||FilePath.Find(".com")!=-1) 
		{ 
			if(StopSign)break; 
			continue; 
		} 
		try 
		{ 
			if(!SFile.Open(FilePath,CFile::shareDenyNone|CFile::modeRead))AfxMessageBox("Can't open "+FilePath); 
			 
			while(SFile.Read(Buf,BufSize-1)>0) 
			{ 
				GetMailAddress(Buf); 
				filesize.Format("%.1fKB",Sizes); 
				m_SearchSize.SetWindowText(filesize); 
				Sizes+=0.1; 
				if(StopSign)break; 
			} 
		} 
		catch(CFileException *e) 
		{ 
			e->Delete(); 
		} 
		SFile.Close(); 
		if(StopSign)break; 
	}	 
    //(strParent + f.GetFileName())是文件名,处理文件	 
  } 
  return; 
} 
 
void CLocalFind::GetMailAddress(char szbuf[BufSize]) 
{ 
	char buf[1]; 
	bool add; 
	int Pos=0; 
	CString mailstr1,mailstr2,tempstr,tempfilter; 
	CString tempss,Total_c; 
	CFindEmailDlg GetFilter; 
	for(long i=0;i<=BufSize-2;i++) 
		{ 
		 
				if(szbuf[i]=='@') 
				{ 
					Pos=i; 
					Pos--; 
					while(1) 
					{ 
					 
						if(szbuf[Pos]>='a'&&szbuf[Pos]<='z'||szbuf[Pos]>='0'&&szbuf[Pos]<='9' 
						||szbuf[Pos]=='_'||szbuf[Pos]=='.'||szbuf[Pos]=='-'||szbuf[Pos]>='A'&&szbuf[Pos]<='Z') 
						{ 
							buf[0]=szbuf[Pos]; 
							mailstr1=buf[0]+mailstr1; 
						} 
						else break; 
						Pos--; 
					} 
					Pos=i; 
					Pos++; 
					while(1) 
					{ 
						if(szbuf[Pos]>='a'&&szbuf[Pos]<='z'||szbuf[Pos]>='0'&&szbuf[Pos]<='9' 
						||szbuf[Pos]=='.'||szbuf[Pos]>='A'&&szbuf[Pos]<='Z') 
						{ 
							buf[0]=szbuf[Pos]; 
							mailstr2=mailstr2+buf[0]; 
						} 
						else break; 
						Pos++; 
					} 
					if(mailstr1!=""&&mailstr2!="") 
					{ 
						tempstr=mailstr1+"@"+mailstr2; 
						tempstr.MakeLower(); 
						add=true; 
						if(FilterCount>=0) 
						{ 
							for(int mailpos=0;mailpos<=FilterCount;mailpos++) 
							{ 
								tempfilter=Filterstr[mailpos]; 
								if(tempstr.Find(tempfilter)!=-1){add=false;break;} 
							} 
						} 
						if(add&&tempstr.GetLength()<25&& 
							(tempstr.Find(".com")!=-1||tempstr.Find(".net")!=-1 
							||tempstr.Find(".org")!=-1||tempstr.Find(".cn")!=-1 
							||tempstr.Find(".edu")!=-1)) 
							 
						{ 
							 
							for(int mailpos=0;mailpos<=m_MailList.GetItemCount();mailpos++) 
							{ 
								tempss=m_MailList.GetItemText(mailpos,0); 
								if(tempstr==tempss){add=false;break;} 
							} 
							 
							if(add) 
							{ 
								m_MailList.InsertItem(MailCount,tempstr); 
								MailCount++; 
								Total_c.Format("%ld",MailCount); 
								m_Total.SetWindowText(Total_c); 
					 
							} 
						} 
					} 
				mailstr1=""; 
				mailstr2=""; 
				} 
		if(StopSign)break; 
							 
		} 
} 
 
UINT FindLocalThread(LPVOID param) 
{ 
 
	CLocalFind *Dlg=(CLocalFind*)param; 
	Dlg->Findallfile(Dlg->m_DirPath); 
	Dlg->m_Folder.EnableWindow(true); 
	Dlg->m_Find.EnableWindow(true); 
	Dlg->m_Save.EnableWindow(true); 
	Dlg->m_Cancel.EnableWindow(true); 
	Dlg->StopSign=true; 
	return 0; 
} 
 
void CLocalFind::OnStopButton()  
{ 
	// TODO: Add your control notification handler code here 
	StopSign=true; 
} 
 
UINT StatusThread(LPVOID param) 
{ 
	CLocalFind *Dlg=(CLocalFind*)param; 
	while(1) 
	{ 
		if(Dlg->StopSign)break; 
		Dlg->m_Status.SetWindowText(" \\"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText(" |"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText(" /"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText("---"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText(" \\"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText(" |"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText(" /"); 
		Sleep(20); 
		Dlg->m_Status.SetWindowText("---"); 
		Sleep(20); 
	} 
	return 0; 
}