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

📄 log.cpp

📁 ARP test mode. According to the idea we design the arithmetic for the key part, first the system sen
💻 CPP
字号:
// Log.cpp : implementation file
//

#include "stdafx.h"
#include "LANDetect.h"
#include "Log.h"
#include "LOGResult.h"
#include "DlgAdp.h"
#include "Detail.h"
#include "Find.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLog dialog
CString buffer[255];
int bnum[255];
int Lnum;       //统计buffer中共有多少个数据
CLog::CLog(CWnd* pParent /*=NULL*/)
	: CDialog(CLog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLog)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CLog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLog)
	DDX_Control(pDX, IDC_LIST_NEED, m_need);
	DDX_Control(pDX, IDC_LIST_LOG, m_log);
	DDX_Control(pDX, IDC_COMBO_YEAR, m_year);
	DDX_Control(pDX, IDC_COMBO_MONTH, m_month);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLog, CDialog)
	//{{AFX_MSG_MAP(CLog)
	ON_BN_CLICKED(IDC_BUTTON_SHOW, OnButtonShow)
	ON_BN_CLICKED(IDC_BUTTON_DETECT, OnButtonDetect)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
	ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_LOG, OnColumnclickListLog)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLog message handlers

BOOL CLog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	//设置组合框的初始值
	m_month.SetCurSel(0);
	m_year.SetCurSel(0);
	Lnum=0;
	//设置LIST控件的初始化
	DWORD dwStyle=GetWindowLong(m_log.GetSafeHwnd(),GWL_STYLE);
	dwStyle&=~LVS_TYPEMASK;
	dwStyle|=LVS_REPORT;
	SetWindowLong(m_log.GetSafeHwnd(),GWL_STYLE,dwStyle);
    m_log.InsertColumn(0,"IP地址",LVCFMT_LEFT,120);
	m_log.InsertColumn(1,"累计次数",LVCFMT_CENTER,80);
	m_log.SetExtendedStyle(LVS_EX_GRIDLINES);
    ::SendMessage(m_log.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
      LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);	
	DWORD dwStyle1=GetWindowLong(m_need.GetSafeHwnd(),GWL_STYLE);
	dwStyle1&=~LVS_TYPEMASK;
	dwStyle1|=LVS_REPORT;
	SetWindowLong(m_need.GetSafeHwnd(),GWL_STYLE,dwStyle);
    m_need.InsertColumn(0,"IP地址",LVCFMT_CENTER,230);
	m_need.SetExtendedStyle(LVS_EX_GRIDLINES);
    ::SendMessage(m_need.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
      LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
	//初始化需要显示的数据       关键:需要统计某一IP的累计次数
	CString SIP;
	//连接数据库
	if(m_db.IsOpen())
		m_db.Close();
	CString sql;
	sql="select * from Record";   
	m_db.Open(CRecordset::dynaset,_T(sql));
	while(!m_db.IsEOF())        //先将需要的信息存下来
	{
		SIP=m_db.m_DIP;
		if(!IsInsert(SIP))
		{
			buffer[Lnum]=SIP;
			bnum[Lnum]=1;
			Lnum++;
		}
		else
			bnum[(IsInsert(SIP))-1]++;
		m_db.MoveNext();
	}
	for(int i=0;i<Lnum;i++)           //显示保存下来的结果
	{
		m_log.InsertItem(0,buffer[i],0);
		CString num;
		num.Format("%d",bnum[i]);
		m_log.SetItemText(0,1,num);
	}
	SetProp(m_log.GetSafeHwnd(),"排序列号",(HANDLE)0);
	SetProp(m_log.GetSafeHwnd(),"排序顺序",(HANDLE)1);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//判断该IP是否已添加到列表中
int CLog::IsInsert(CString SIP)
{

	for(int i=0;i<Lnum;i++)
	{
		if(SIP==buffer[i])
			return ++i;
	}
	return 0;
}
void CLog::OnButtonShow() 
{

	for(int i=0;i<Lnum;i++)
	{
		buffer[i]="";
		bnum[i]=0;
	}
	Lnum=0;
	m_log.DeleteAllItems();
	if(m_db.IsOpen())
		m_db.Close();
	CString sql;
	sql="select * from Record";   
	m_db.Open(CRecordset::dynaset,_T(sql));
	//CString Getstring1,Getstring2;
	int Getyear,Getmonth;           //获取选中的年、月
	//m_year.GetLBText(m_year.GetCurSel(),Getstring1);
	//m_month.GetLBText(m_month.GetCurSel(),Getstring2);
	Getyear=m_year.GetCurSel();
	Getmonth=m_month.GetCurSel();
	while(!m_db.IsEOF())
	{
		CString Gettime,GetIP;
		GetIP=m_db.m_DIP;
		Gettime=m_db.m_DTimes;
		Deal(GetIP,Gettime,Getyear,Getmonth);
		m_db.MoveNext();
	}
	for(i=0;i<Lnum;i++)           //显示保存下来的结果
	{
		m_log.InsertItem(0,buffer[i],0);
		CString num;
		num.Format("%d",bnum[i]);
		m_log.SetItemText(0,1,num);
	}

}

void CLog::Deal(CString GetIP,CString Gettime,int Getyear,int Getmonth)
{
	int Month;
	if(Gettime.GetAt(6)!='-')
		Month=(Gettime.GetAt(5)-48)*10+(Gettime.GetAt(6)-48);
	else
		Month=Gettime.GetAt(5)-48;

	CString Year;
	switch(Getyear)
	{
	case 0:
		Year="";
		break;
	case 1:
		Year="2007";
		break;
	case 2:
		Year="2008";
		break;
	case 3:
		Year="2009";
		break;
	default:
		break;
	}
	CString GetYear;
	GetYear.Format("%c%c%c%c",Gettime.GetAt(0),Gettime.GetAt(1),Gettime.GetAt(2),Gettime.GetAt(3));
	if(Getyear!=0)
	{
		if(Getmonth==0)
		{
			if(Year!=GetYear)
				return;
		}
		else
		{
			if(Year!=GetYear||Getmonth!=Month)
				return;
		}
	}
	else
	{
		if(Getmonth!=0)
		{
			if(Getmonth!=Month)
				return;
		}
	}
	if(!IsInsert(GetIP))
	{
		buffer[Lnum]=GetIP;
		bnum[Lnum]=1;
		Lnum++;
	}
	else
		bnum[(IsInsert(GetIP))-1]++;
}
//监测某一个主机
void CLog::OnButtonDetect() 
{
	if(dev==NULL){
		MessageBox("请选择网卡!");
		return ;
	}
	for(int i=0;i<m_need.GetItemCount();i++)
	{
		LIP[i]=m_need.GetItemText(i,0);
	}
	Lognum=m_need.GetItemCount();
	if(Lognum==0)
	{
		AfxMessageBox("要监测的主机列表不可为空!");
		return;
	}
	CLOGResult dlg;
	dlg.DoModal();
}

void CLog::OnButtonAdd() 
{
	// TODO: Add your control notification handler code here
	POSITION pos=m_log.GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		AfxMessageBox("请从左边列表中选择一项!");
		return;
	}
    int SelIndex = m_log.GetNextSelectedItem(pos);
	CString str;
	str=m_log.GetItemText(SelIndex,0);
	//判断右列表中是否已有该项
	for(int i=0;i<m_need.GetItemCount();i++)
	{
		if(m_need.GetItemText(i,0)==str)
		{
			AfxMessageBox("右侧待测列表中已有该IP地址!");
			return;
		}
	}
	m_need.InsertItem(0,str,0);
}

void CLog::OnButtonDel() 
{
	POSITION pos=m_need.GetFirstSelectedItemPosition();
	if(pos==NULL)
	{
		AfxMessageBox("请从右边列表中选择一项!");
		return;
	}
    int SelIndex = m_need.GetNextSelectedItem(pos);
	m_need.DeleteItem(SelIndex);
}

void CLog::OnButtonSet()  
{

	CDlgAdp dlg;
	dlg.DoModal();
}
//排序比较函数
int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSort)
{   
    MyData *p=(MyData *)lParamSort;
	CListCtrl* list =p->listctrl;
	int isub=p->isub;
	LVFINDINFO findInfo; 
	findInfo.flags = LVFI_PARAM; 
	findInfo.lParam = lParam1; 
	int iItem1 = list->FindItem(&findInfo, -1); 
	findInfo.lParam = lParam2; 
	int iItem2 = list->FindItem(&findInfo, -1); 
	CString strItem1 =list->GetItemText(iItem1,isub); 
	CString strItem2 =list->GetItemText(iItem2,isub);
	int cflag;
	if(atoi(LPCSTR(strItem1)) > atoi(LPCSTR(strItem2)))
		cflag=1;
	else
		cflag=-1;
	if(p->seq)
		return cflag;
	else
		return -cflag;

}   
//对列表进行排序
void CLog::OnColumnclickListLog(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	MyData *tmpp=new MyData;
	tmpp->listctrl=&m_log;
	tmpp->isub=pNMListView->iSubItem;
	int sortnum=(int)GetProp(m_log.GetSafeHwnd(),"排序列号");
	int sortasc=(int)GetProp(m_log.GetSafeHwnd(),"排序顺序");
	if(sortnum==pNMListView->iSubItem){
	sortasc=(sortasc+1)%2;
	SetProp(m_log.GetSafeHwnd(),"排序顺序",(HANDLE)sortasc);
	}
	SetProp(m_log.GetSafeHwnd(),"排序列号",(HANDLE)pNMListView->iSubItem);
	tmpp->seq=sortasc;
	for (int i=0;i<m_log.GetItemCount();i++)
	{
		m_log.SetItemData(i, i);
	}
	m_log.SortItems(CompareFunc,(LPARAM)tmpp);
	*pResult = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -