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;
}