📄 portmonview.cpp
字号:
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
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);
}
}
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("启动失败");
}
}
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 + -