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

📄 portmonview.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		nResult = CompNetProcItem( (NETPROC_S *)lParam1, (NETPROC_S *)lParam2, nColumn );
	}
	else
	{
		nResult = CompSysProcItem( (SYSPROC_S *)lParam1, (SYSPROC_S *)lParam2, nColumn);
	}

	return nResult;
}

int CPortMonView::CompNetProcItem(NETPROC_S *pProc1, NETPROC_S *pProc2, int nColumn)
{
	int nResult = 0;
	DWORD dwNum1 = 0, dwNum2 = 0;

	CString sTemp1(""), sTemp2("");
	switch( nColumn )
	{
	case COL_NETPID:
		dwNum1 = pProc1->stProcessKey.dwPid;
		dwNum2 = pProc2->stProcessKey.dwPid;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_PROTOCOL:
		if( pProc1->stProcessKey.cProtocol == enTCP )
		{
			sTemp1 = _T("TCP");
		}
		else
		{
			sTemp1 = _T("UDP");
		}

		if( pProc2->stProcessKey.cProtocol == enTCP )
		{
			sTemp2 = _T("TCP");
		}
		else
		{
			sTemp2 = _T("UDP");
		}

		nResult = sTemp1.CompareNoCase(sTemp2);
		break;

	case COL_LOCALIP:
		dwNum1 = pProc1->stProcessKey.dwLocalIP;
		dwNum2 = pProc2->stProcessKey.dwLocalIP;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_LOCALPORT:
		dwNum1 = pProc1->stProcessKey.wLocalPort;
		dwNum2 = pProc2->stProcessKey.wLocalPort;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_REMOTEIP:
		if( pProc1->stProcessKey.cProtocol == enTCP )
		{
			dwNum1 = pProc1->stProcessKey.dwRemoteIP;
		}

		if( pProc2->stProcessKey.cProtocol == enTCP )
		{
			dwNum2 = pProc2->stProcessKey.dwRemoteIP;
		}

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_REMOTEPORT:
		if( pProc1->stProcessKey.cProtocol == enTCP )
		{
			dwNum1 = pProc1->stProcessKey.wRemotePort;
		}

		if( pProc2->stProcessKey.cProtocol == enTCP )
		{
			dwNum2 = pProc2->stProcessKey.wRemotePort;
		}

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_STATE:
		if( pProc1->stProcessKey.cProtocol == enTCP )
		{
			sTemp1 = pProc1->szState;
		}

		if( pProc2->stProcessKey.cProtocol == enTCP )
		{
			sTemp2 = pProc2->szState;
		}

		nResult = sTemp1.CompareNoCase(sTemp2);
		break;

	case COL_NETPATH:
		sTemp1 = pProc1->szPath;
		sTemp2 = pProc2->szPath;

		nResult = sTemp1.CompareNoCase(sTemp2);
		break;

	default:
		break;
	}

	return nResult;
}

int CPortMonView::CompSysProcItem(SYSPROC_S *pProc1, SYSPROC_S *pProc2, int nColumn)
{
	int nResult = 0;
	DWORD dwNum1 = 0, dwNum2 = 0;

	CString sTemp1(""), sTemp2("");
	switch( nColumn )
	{
	case COL_PID:
		dwNum1 = pProc1->dwPid;
		dwNum2 = pProc2->dwPid;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_PRIORITY:
		dwNum1 = pProc1->wPriority;
		dwNum2 = pProc2->wPriority;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_THREADS:
		dwNum1 = pProc1->wThreads;
		dwNum2 = pProc2->wThreads;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_MEMUSAGE:
		dwNum1 = pProc1->dwMemUsage;
		dwNum2 = pProc2->dwMemUsage;

		nResult = BigNumCompare(dwNum1, dwNum2);
		break;

	case COL_PATH:
		sTemp1 = pProc1->szPath;
		sTemp2 = pProc2->szPath;

		nResult = sTemp1.CompareNoCase(sTemp2);
		break;

	default:
		break;
	}

	return nResult;
}

CString CPortMonView::GetListInfo(LPARAM lParam, int nColumn)
{
	CString sTemp("");
	if( !lParam )
	{
		return sTemp;
	}

	// 获取特定列的列表信息
	if( ((CPortMonApp *)AfxGetApp())->m_bShowNetProc )
	{
		NETPROC_S *pNetProc = (NETPROC_S *)lParam;
		sTemp = GetNetProcInfo( pNetProc, nColumn );
	}
	else
	{
		SYSPROC_S *pSysProc = (SYSPROC_S *)lParam;
		sTemp = GetSysProcInfo( pSysProc, nColumn );
	}

	return sTemp;
}

CString CPortMonView::GetNetProcInfo(NETPROC_S* pNetProc, int nColumn)
{
	CString sTemp("");
	DWORD dwIP;

	switch( nColumn )
	{
	case COL_NETPID:
		sTemp.Format( "%u", pNetProc->stProcessKey.dwPid );
		break;

	case COL_PROTOCOL:
		if( pNetProc->stProcessKey.cProtocol == enTCP )
		{
			sTemp = _T("TCP");
		}
		else
		{
			sTemp = _T("UDP");
		}

		break;

	case COL_LOCALIP:
		dwIP = pNetProc->stProcessKey.dwLocalIP;
		sTemp.Format( "%d.%d.%d.%d", dwIP&0xFF, (dwIP>>8)&0xFF, (dwIP>>16)&0xFF, (dwIP >> 24)&0xFF );
		break;

	case COL_LOCALPORT:
		sTemp.Format( "%u", pNetProc->stProcessKey.wLocalPort );
		break;

	case COL_REMOTEIP:
		if( pNetProc->stProcessKey.cProtocol == enTCP )
		{
			dwIP = pNetProc->stProcessKey.dwRemoteIP;
			sTemp.Format( "%d.%d.%d.%d", dwIP&0xFF, (dwIP>>8)&0xFF, (dwIP>>16)&0xFF, (dwIP >> 24)&0xFF );
		}

		break;

	case COL_REMOTEPORT:
		if( pNetProc->stProcessKey.cProtocol == enTCP )
		{
			sTemp.Format( "%u", pNetProc->stProcessKey.wRemotePort );
		}
		break;

	case COL_STATE:
		if( pNetProc->stProcessKey.cProtocol == enTCP )
		{
			sTemp = pNetProc->szState;
		}
		break;

	case COL_NETPATH:
		sTemp = pNetProc->szPath;
		break;

	default:
		break;
	}

	return sTemp;
}

CString CPortMonView::GetSysProcInfo(SYSPROC_S* pSysProc, int nColumn)
{
	CString sTemp("");

	switch( nColumn )
	{
	case COL_PID:
		sTemp.Format( "%u", pSysProc->dwPid );
		break;

	case COL_PRIORITY:
		sTemp.Format( "%u", pSysProc->wPriority );
		break;

	case COL_THREADS:
		sTemp.Format( "%u", pSysProc->wThreads );
		break;

	case COL_MEMUSAGE:
		sTemp.Format( "%u", pSysProc->dwMemUsage );
		break;

	case COL_PATH:
		sTemp = pSysProc->szPath;
		break;

	default:
		break;
	}

	return sTemp;
}

void CPortMonView::DoDefault(void)
{
	OnOperOpenPath();
}

LRESULT CPortMonView::OnProcNotify( WPARAM wParam, LPARAM lParam )
{
	if( wParam )
	{
		AddProcessCreated( (DWORD)lParam );
	}
	else
	{
		RemoveProcByID( (DWORD)lParam );
	}

	return 0;
}

void CPortMonView::SaveList(CArchive &ar)
{
	//CWaitCursor Waiter;
	HDITEM hdi;
	TCHAR  szBuffer[MAX_PATH];

	// lock the list when saving it
	m_mutexList.Lock();

	CBCGPHeaderCtrl &hdrCtrl= m_wndListExt.GetHeaderCtrl();
	int nColNum = hdrCtrl.GetItemCount();
	ZeroMemory( &hdi, sizeof(HDITEM) );
	hdi.mask = HDI_TEXT;
	hdi.pszText = szBuffer;
	hdi.cchTextMax = MAX_PATH;

	// get head title and save
	CString sTemp(_T("")), sFmtText("");
	for( int nCol = 0; nCol < nColNum; nCol++ )
	{
		if( hdrCtrl.GetItem(nCol, &hdi) )
		{
			sFmtText.Format( "%-15s  ", hdi.pszText );
			sTemp += sFmtText;
		}
		else
		{
			sTemp += _T("                 ");
		}
	}
	sTemp += _T("\r\n");
	ar.WriteString(sTemp);

	// fill bar line
	BYTE cFill = '-';
	FillMemory( sTemp.GetBuffer( 140 ), 140, cFill );
	sTemp.ReleaseBuffer(140);
	sTemp += _T("\r\n\r\n");
	ar.WriteString(sTemp);

	// save each item text
	for( int nItem = 0; nItem < m_wndListExt.GetItemCount(); nItem++ )
	{
		sTemp = _T("");
		for( nCol = 0; nCol < nColNum; nCol++ )
		{
			sFmtText.Format( "%-15s  ", m_wndListExt.GetItemText( nItem, nCol ) );
			sTemp += sFmtText;
		}
		sTemp += _T("\r\n");
		ar.WriteString(sTemp);
	}

	m_mutexList.Unlock();
}

void CPortMonView::OnDestroy()
{
	CViewExt::OnDestroy();

	// TODO: 在此处添加消息处理程序代码
	CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
	if( pFrame )
	{
		pFrame->StopMon();
	}
}

CString CPortMonView::GetTargetAddress(void)
{
	CString sIpAddr(_T(""));
	CBCGPToolbarComboBoxButton *pIpAddrCombo = ((CMainFrame *)AfxGetMainWnd())->GetComboIpAddr();
	if( !pIpAddrCombo )
	{
		return sIpAddr;
	}

	sIpAddr = pIpAddrCombo->GetText();
	return sIpAddr;
}

void CPortMonView::UpdateIpAddrCombo(int nItem)
{
	CBCGPToolbarComboBoxButton *pIpAddrCombo = ((CMainFrame *)AfxGetMainWnd())->GetComboIpAddr();
	if( !pIpAddrCombo || (nItem == -1) )
	{
		return;
	}

	CString sNewIpAddr = m_wndListExt.GetItemText(nItem, COL_REMOTEIP);
	pIpAddrCombo->SetText(sNewIpAddr);
}

void CPortMonView::OnToolWhois()
{
	if( !DoNetOpera(NET_OPER_WHOIS) )
	{
		AfxMessageBox("启动失败");
	}
}

void CPortMonView::OnUpdateToolWhois(CCmdUI *pCmdUI)
{
	int nItem;
	CString sTemp(_T(""));
	POSITION pos = m_wndListExt.GetFirstSelectedItemPosition();
	if(pos)
	{
		nItem = m_wndListExt.GetNextSelectedItem(pos);
		sTemp = m_wndListExt.GetItemText(nItem, COL_PROTOCOL);
	}
	pCmdUI->Enable((m_wndListExt.GetSelectedCount() > 0) && (sTemp.CompareNoCase(_T("TCP")) == 0) );
}

BOOL CPortMonView::DoNetOpera(int nNetOper)
{
	// start ping thread
	CNetDlg *pDlg = new CNetDlg(this);
	if( !pDlg )
	{
		return FALSE;
	}

	// fill some necessary parameters for ping
	CString sHost = GetTargetAddress();
	if( sHost.IsEmpty() )
	{
		delete pDlg;
		return FALSE;
	}
	pDlg->m_sHostName = sHost;
	pDlg->m_nNetOper = nNetOper;

	// create window and show it
	if( !pDlg->Create(IDD_NETDLG) )
	{
		delete pDlg;
		return FALSE;
	}

	if( !::IsWindow(pDlg->m_hWnd) ) 
	{
		delete pDlg;
		return FALSE;
	}
	pDlg->CenterWindow();
	pDlg->ShowWindow(SW_SHOW);

	CWinThread *pThread = AfxBeginThread( ThreadProc, (LPVOID)pDlg, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED );
	if( !pThread )
	{
		delete pDlg;
		return FALSE;
	}

	pThread->m_bAutoDelete = FALSE;
	pDlg->m_pNetThread = pThread;
	pThread->ResumeThread();

	OnComboIpAddrEnter(); // add current input ip address into combo-list box
	return TRUE;
}

⌨️ 快捷键说明

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