CCAMSCDlg.cpp
上传用户:fzchengxin
上传日期:2013-10-17
资源大小:2070k
文件大小:14k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // CCAMSCDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CCAMSC.h"
  5. #include "CCAMSCDlg.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CAboutDlg dialog used for App About
  13. class CAboutDlg : public CDialog
  14. {
  15. public:
  16. CAboutDlg();
  17. // Dialog Data
  18. //{{AFX_DATA(CAboutDlg)
  19. enum { IDD = IDD_ABOUTBOX };
  20. //}}AFX_DATA
  21. // ClassWizard generated virtual function overrides
  22. //{{AFX_VIRTUAL(CAboutDlg)
  23. protected:
  24. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  25. //}}AFX_VIRTUAL
  26. // Implementation
  27. protected:
  28. //{{AFX_MSG(CAboutDlg)
  29. //}}AFX_MSG
  30. DECLARE_MESSAGE_MAP()
  31. };
  32. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  33. {
  34. //{{AFX_DATA_INIT(CAboutDlg)
  35. //}}AFX_DATA_INIT
  36. }
  37. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  38. {
  39. CDialog::DoDataExchange(pDX);
  40. //{{AFX_DATA_MAP(CAboutDlg)
  41. //}}AFX_DATA_MAP
  42. }
  43. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  44. //{{AFX_MSG_MAP(CAboutDlg)
  45. // No message handlers
  46. //}}AFX_MSG_MAP
  47. END_MESSAGE_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // CCAMSCDlg dialog
  50. CCAMSCDlg::CCAMSCDlg(CWnd* pParent /*=NULL*/)
  51. : CDialog(CCAMSCDlg::IDD, pParent)
  52. {
  53. //{{AFX_DATA_INIT(CCAMSCDlg)
  54. m_StrCpuUsage = _T("");
  55. m_StrNowtime = _T("");
  56. m_Port = 0;
  57. //}}AFX_DATA_INIT
  58. // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
  59. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  60. }
  61. void CCAMSCDlg::DoDataExchange(CDataExchange* pDX)
  62. {
  63. CDialog::DoDataExchange(pDX);
  64. //{{AFX_DATA_MAP(CCAMSCDlg)
  65. DDX_Control(pDX, IDC_BUTTON_connect, m_CtrlConnect);
  66. DDX_Control(pDX, IDC_BUTTON_Capture, m_CtrlCapture);
  67. DDX_Control(pDX, IDC_COMBO_NIC, m_CtrlComboBoxNIC);
  68. DDX_Control(pDX, IDC_COMBO_Driver, m_CtrlComboBoxDriver);
  69. DDX_Control(pDX, IDC_EDIT_Port, m_CtrlPort);
  70. DDX_Control(pDX, IDC_IPADDRESS, m_CtrlIpAddress);
  71. DDX_Control(pDX, IDC_LIST_Activities, m_CtrlList);
  72. DDX_Text(pDX, IDC_STATIC_CUPUSAGE, m_StrCpuUsage);
  73. DDX_Text(pDX, IDC_STATIC_NOWTIME, m_StrNowtime);
  74. DDX_Text(pDX, IDC_EDIT_Port, m_Port);
  75. //}}AFX_DATA_MAP
  76. }
  77. BEGIN_MESSAGE_MAP(CCAMSCDlg, CDialog)
  78. //{{AFX_MSG_MAP(CCAMSCDlg)
  79. ON_WM_SYSCOMMAND()
  80. ON_WM_PAINT()
  81. ON_WM_QUERYDRAGICON()
  82. ON_COMMAND(IDC_MENU_EXIT, OnMenuExit)
  83. ON_COMMAND(IDR_MENU_ABOUT, OnMenuAbout)
  84. ON_COMMAND(IDC_MENU_SHOW, OnMenuShow)
  85. ON_WM_TIMER()
  86. ON_WM_DESTROY()
  87. ON_BN_CLICKED(IDC_BUTTON_Capture, OnStartCapture)
  88. ON_BN_CLICKED(IDC_BUTTON_connect, OnConnectServer)
  89. ON_COMMAND(ID_MENU_Help, OnMENUHelp)
  90. //}}AFX_MSG_MAP
  91. ON_MESSAGE(WM_USER_TRAY_NOTIFICATION,OnTrayNotification)
  92. END_MESSAGE_MAP()
  93. /////////////////////////////////////////////////////////////////////////////
  94. // CCAMSCDlg message handlers
  95. BOOL CCAMSCDlg::OnInitDialog()
  96. {
  97. CDialog::OnInitDialog();
  98. // Add "About..." menu item to system menu.
  99. // IDM_ABOUTBOX must be in the system command range.
  100. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  101. ASSERT(IDM_ABOUTBOX < 0xF000);
  102. CMenu* pSysMenu = GetSystemMenu(FALSE);
  103. if (pSysMenu != NULL)
  104. {
  105. CString strAboutMenu;
  106. strAboutMenu.LoadString(IDS_ABOUTBOX);
  107. if (!strAboutMenu.IsEmpty())
  108. {
  109. pSysMenu->AppendMenu(MF_SEPARATOR);
  110. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  111. }
  112. }
  113. // Set the icon for this dialog.  The framework does this automatically
  114. //  when the application's main window is not a dialog
  115. SetIcon(m_hIcon, TRUE); // Set big icon
  116. SetIcon(m_hIcon, FALSE); // Set small icon
  117. // TODO: Add extra initialization here
  118. //creat initialization trayIcon
  119. m_trayIcon.Create(this, WM_USER_TRAY_NOTIFICATION, "CCAMSC",m_hIcon, IDR_MENU_TRAY);
  120. //read set.ini
  121. TCHAR exeFullPath[_MAX_PATH];
  122. CString T_CStr_FileName="";
  123. GetModuleFileName(NULL,exeFullPath,_MAX_PATH);
  124. for(int i=0;exeFullPath[i]!='';i++)//TCHAR to CString 
  125. T_CStr_FileName+=exeFullPath[i];
  126. int T_StrStart=T_CStr_FileName.ReverseFind('\');//cat appName
  127. CString t_StrEXE=T_CStr_FileName.Mid(T_StrStart+1);
  128. T_CStr_FileName.Replace(t_StrEXE,"sets.ini");//add create File name 
  129. char inBuf[10]={' '};
  130. int  nField0,nField1,nField2,nField3;
  131. GetPrivateProfileString ("Server", "nField0", "192", inBuf, 10, T_CStr_FileName); 
  132. nField0=atoi(inBuf);
  133. GetPrivateProfileString ("Server", "nField1", "168", inBuf, 10, T_CStr_FileName); 
  134. nField1=atoi(inBuf);
  135. GetPrivateProfileString ("Server", "nField2", "0", inBuf, 10, T_CStr_FileName); 
  136. nField2=atoi(inBuf);
  137. GetPrivateProfileString ("Server", "nField3", "1", inBuf,10, T_CStr_FileName); 
  138. nField3=atoi(inBuf);
  139. m_CtrlIpAddress.SetAddress(nField0, nField1,nField2, nField3 );
  140. GetPrivateProfileString ("Server", "Port", "5530", inBuf, 10, T_CStr_FileName); 
  141. m_Port=atoi(inBuf);
  142. //find all the drives 
  143. char  szDrives[129];
  144. if ( !GetLogicalDriveStrings( sizeof(szDrives) - 1, szDrives ) )
  145. //szDrives中的内容: a:<null>c:<null>d:<null>e:<null>f:<null>g:<null><null>
  146. {
  147. MessageBox("Error Getting Logical DriveStrings!") ;
  148. }
  149. char* pDrive = szDrives;
  150. while( *pDrive )
  151. {
  152. m_CtrlComboBoxDriver.AddString(pDrive);
  153. pDrive += strlen( pDrive ) + 1; //注意,strlen(pDrive)==3 // Good!!!!!!
  154. }
  155. // m_CtrlComboBoxDriver.GetCurSel()
  156. //get the NIC
  157. m_MailProbe.initallize();
  158. for( i=0;i<=m_MailProbe.devnum-1;i++)
  159. m_CtrlComboBoxNIC.AddString(m_MailProbe.devdesc[i]);
  160. m_CtrlComboBoxDriver.SetCurSel(0);
  161. m_CtrlComboBoxNIC.SetCurSel(0); 
  162. m_CtrlCapture.EnableWindow(false);
  163. UpdateData(false);
  164. return TRUE;  // return TRUE  unless you set the focus to a control
  165. }
  166. void CCAMSCDlg::OnSysCommand(UINT nID, LPARAM lParam)
  167. {
  168. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  169. {
  170. CAboutDlg dlgAbout;
  171. dlgAbout.DoModal();
  172. }
  173. else if ((nID & 0xFFF0)==SC_CLOSE){
  174. //OnClose();本来这个是关闭的  这里也改为隐藏。
  175. ShowWindow(SW_HIDE);
  176. else {
  177. CDialog::OnSysCommand(nID, lParam);
  178. }
  179. }
  180. // If you add a minimize button to your dialog, you will need the code below
  181. //  to draw the icon.  For MFC applications using the document/view model,
  182. //  this is automatically done for you by the framework.
  183. void CCAMSCDlg::OnPaint() 
  184. {
  185. if (IsIconic())
  186. {
  187. CPaintDC dc(this); // device context for painting
  188. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  189. // Center icon in client rectangle
  190. int cxIcon = GetSystemMetrics(SM_CXICON);
  191. int cyIcon = GetSystemMetrics(SM_CYICON);
  192. CRect rect;
  193. GetClientRect(&rect);
  194. int x = (rect.Width() - cxIcon + 1) / 2;
  195. int y = (rect.Height() - cyIcon + 1) / 2;
  196. // Draw the icon
  197. dc.DrawIcon(x, y, m_hIcon);
  198. }
  199. else
  200. {
  201. CDialog::OnPaint();
  202. }
  203. }
  204. // The system calls this to obtain the cursor to display while the user drags
  205. //  the minimized window.
  206. HCURSOR CCAMSCDlg::OnQueryDragIcon()
  207. {
  208. return (HCURSOR) m_hIcon;
  209. }
  210. LONG CCAMSCDlg::OnTrayNotification(WPARAM wparam, LPARAM lparam)
  211. {   
  212.     switch ( lparam )// The tray icon sent us a message.  Let's see what it is
  213.     {
  214. /*case WM_CONTEXTMENU:
  215. TRACE( "WM_CONTEXTMENUn" );*/
  216. case WM_RBUTTONDOWN:
  217. {// popu menu
  218. CMenu oMenu;
  219. if (oMenu.LoadMenu(IDR_MENU_TRAY))        
  220. {
  221. CMenu* pPopup = oMenu.GetSubMenu(0);
  222. ASSERT(pPopup != NULL);
  223. CPoint oPoint;
  224. if (IsWindowVisible())// 根据对话框窗口的显示/隐藏状态修改菜单名称
  225. oMenu.ModifyMenu(IDC_MENU_SHOW,MF_STRING,IDC_MENU_SHOW,"&Hide");
  226. else
  227. oMenu.ModifyMenu(IDC_MENU_SHOW,MF_STRING,IDC_MENU_SHOW,"&Show");
  228. // 确定鼠标位置以便在该位置附近显示菜单
  229. GetCursorPos( &oPoint );
  230. SetForegroundWindow();
  231. pPopup->TrackPopupMenu(
  232. TPM_LEFTALIGN | TPM_RIGHTBUTTON,
  233. oPoint.x, oPoint.y, this); 
  234. }
  235. }
  236. break;
  237. case WM_LBUTTONDBLCLK:
  238. case WM_LBUTTONDOWN:
  239. ShowWindow(SW_SHOW);
  240. break;
  241.     }
  242.     return 0;
  243. }
  244. void CCAMSCDlg::OnMenuExit() 
  245. {
  246. // TODO: Add your command handler code here
  247. OnOK();
  248. }
  249. void CCAMSCDlg::OnMenuAbout() 
  250. {
  251. // TODO: Add your command handler code here
  252. CAboutDlg dlgAbout;
  253. dlgAbout.DoModal();
  254. }
  255. void CCAMSCDlg::OnMenuShow() 
  256. {
  257. // TODO: Add your command handler code here
  258. if (!IsWindowVisible()) {
  259. ShowWindow(SW_SHOW);
  260. }
  261. else
  262. ShowWindow(SW_HIDE);
  263. }
  264. void CCAMSCDlg::OnTimer(UINT nIDEvent) 
  265. {
  266. // TODO: Add your message handler code here and/or call default
  267. NowTime= CTime::GetCurrentTime();
  268. m_StrCpuUsage.Format("%3d",(UINT)m_CpuProbe.getUsage());
  269. m_StrNowtime=NowTime.Format(_T("%H:%M:%S"));
  270. if(nIDEvent==1){
  271. m_StrNowtime="n"+m_StrNowtime+" CPU "+m_StrCpuUsage;
  272. std::string CpuInfo=m_StrNowtime;
  273. m_TcpSend.SendBuff(CpuInfo);
  274. //m_CtrlList.AddString(CpuInfo.c_str());
  275. m_MailProbe.CheckMail();
  276. }
  277. UpdateData(FALSE);
  278. CDialog::OnTimer(nIDEvent);
  279. }
  280. BOOL CCAMSCDlg::DestroyWindow() 
  281. {
  282. // TODO: Add your specialized code here and/or call the base class
  283. return CDialog::DestroyWindow();
  284. }
  285. void CCAMSCDlg::OnDestroy() 
  286. {
  287. CDialog::OnDestroy();
  288. KillTimer(0);
  289. KillTimer(1);
  290. // TODO: Add your message handler code here
  291. }
  292. void CCAMSCDlg::OnStartCapture() 
  293. {
  294. // TODO: Add your control notification handler code 
  295. static flag=1;
  296. ///////start capture
  297. if (flag) {
  298. SetTimer(0,1000,NULL);
  299. SetTimer(1,3000,NULL);
  300. m_CpuProbe.StartAgent();
  301. NICid=m_CtrlComboBoxNIC.GetCurSel();
  302. m_CtrlComboBoxDriver.GetWindowText(m_monDriver);
  303. if((hProbeThread[0]=CreateThread( 0,0,(LPTHREAD_START_ROUTINE)StartProccessProbe,this,0,0 ))!=NULL)
  304. m_CtrlList.AddString("Proccess Probe thread start succeed !");
  305. else
  306. m_CtrlList.AddString("Proccess Probe thread start failed !");
  307. if( (hProbeThread[1]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)StartMailProbe,this,0,0))!=NULL)
  308. m_CtrlList.AddString("Mail Probe thread start succeed !");
  309. else
  310. m_CtrlList.AddString("Mail Probe thread start failed !");
  311. if( (hProbeThread[2]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)StartFileProbe,this,0,0))!=NULL)
  312. m_CtrlList.AddString("File Probe thread start succeed!");
  313. else
  314. m_CtrlList.AddString("File Probe thread start failed!");
  315. if( (hProbeThread[3]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)StartPacketProbe,this,0,0))!=NULL)
  316. m_CtrlList.AddString("Packet Probe thread start succeed !");
  317. else
  318. m_CtrlList.AddString("Packet Probe thread start failed !");
  319. m_CtrlCapture.SetWindowText("Stop Capture");
  320. flag=0;
  321. }
  322. //////stop capture
  323. else{
  324. if (TerminateThread(hProbeThread[0],0)) 
  325. m_CtrlList.AddString("Proccess Probe thread Terminated !");
  326. else
  327. m_CtrlList.AddString("Proccess Probe thread not Terminated !");
  328. if (TerminateThread(hProbeThread[1],0)) 
  329. m_CtrlList.AddString("Mail Probe thread Terminated !");
  330. else
  331. m_CtrlList.AddString("Mail Probe thread not Terminated !");
  332. if (TerminateThread(hProbeThread[2],0)) 
  333. m_CtrlList.AddString("File Probe thread Terminated !");
  334. else
  335. m_CtrlList.AddString("File Probe thread not Terminated !");
  336. if (TerminateThread(hProbeThread[3],0)) 
  337. m_CtrlList.AddString("Packet Probe thread Terminated !");
  338. else
  339. m_CtrlList.AddString("Packet Probe thread not Terminated !");
  340. KillTimer(0);
  341. KillTimer(1);
  342. m_CtrlCapture.SetWindowText("Capture");
  343. // m_CtrlConnect.EnableWindow(true);
  344. flag=1;
  345. }
  346. }
  347. DWORD CCAMSCDlg::StartFileProbe(LPVOID lParam)
  348. {
  349. CCAMSCDlg * l_Dlgobj= (CCAMSCDlg * ) lParam;
  350. // std::string t_str
  351. l_Dlgobj->m_FileProbe.Run(l_Dlgobj->m_monDriver);
  352. // FileProbe.Close();
  353. return 1;
  354. }
  355. DWORD  CCAMSCDlg::StartPacketProbe(LPVOID lParam)
  356. {
  357. CCAMSCDlg * l_Dlgobj= (CCAMSCDlg * ) lParam;
  358. ProbePacket  l_ProbePacket;
  359. l_ProbePacket.StartProbe(l_Dlgobj->NICid);
  360. return 1;
  361. }
  362. DWORD CCAMSCDlg::StartMailProbe(LPVOID lParam)
  363. {
  364. CCAMSCDlg * l_Dlgobj= (CCAMSCDlg * ) lParam;
  365. if (PtrBuffWrite->len>2800) {
  366. l_Dlgobj->m_TcpSend.SendBuff("buff_full");
  367. }
  368. else
  369. l_Dlgobj->m_MailProbe.StartProbe(l_Dlgobj->NICid);
  370. return 1;
  371. }
  372. DWORD CCAMSCDlg::StartProccessProbe(LPVOID lParam)
  373. {
  374. CCAMSCDlg * l_Dlgobj= (CCAMSCDlg * ) lParam;
  375. l_Dlgobj->m_ProcessProbe.Run();
  376. return 1;
  377. }
  378. void CCAMSCDlg::OnConnectServer() 
  379. {
  380. // TODO: Add your control notification handler code here
  381. UpdateData(true);
  382. BYTE  nField0,nField1,nField2,nField3;
  383. if (m_CtrlIpAddress.IsBlank()) {
  384. MessageBox("Server Ip is need!");
  385. return;
  386. }
  387. m_CtrlIpAddress.GetAddress( nField0,  nField1,  nField2, nField3 );
  388. CString t_CStrIpAddress;
  389. t_CStrIpAddress.Format("%d.%d.%d.%d",nField0,nField1,nField2,nField3);
  390. std::string t_strIpAddree=t_CStrIpAddress;
  391. char l_IpAddrees[20]={''};
  392. strcpy(l_IpAddrees, t_strIpAddree.c_str());
  393. m_TcpSend.StartSock();
  394. m_TcpSend.CreateSocket();
  395. if(m_TcpSend.CallServer(l_IpAddrees,m_Port)){
  396. m_CtrlList.AddString("Connect Server succeed !");
  397. //save Server iP and port to set.ini 
  398. TCHAR exeFullPath[_MAX_PATH];
  399. CString T_CStr_FileName="";
  400. GetModuleFileName(NULL,exeFullPath,_MAX_PATH);
  401. for(int i=0;exeFullPath[i]!='';i++)//TCHAR to CString 
  402. T_CStr_FileName+=exeFullPath[i];
  403. int T_StrStart=T_CStr_FileName.ReverseFind('\');//cat appName
  404. CString t_StrEXE=T_CStr_FileName.Mid(T_StrStart+1);
  405. T_CStr_FileName.Replace(t_StrEXE,"sets.ini");//add create File name 
  406. t_CStrIpAddress.Format("%d",nField0);
  407. ::WritePrivateProfileString("Server","nField0",t_CStrIpAddress,T_CStr_FileName);
  408. t_CStrIpAddress.Format("%d",nField1);
  409. ::WritePrivateProfileString("Server","nField1",t_CStrIpAddress,T_CStr_FileName);
  410. t_CStrIpAddress.Format("%d",nField2);
  411. ::WritePrivateProfileString("Server","nField2",t_CStrIpAddress,T_CStr_FileName);
  412. t_CStrIpAddress.Format("%d",nField3);
  413. ::WritePrivateProfileString("Server","nField3",t_CStrIpAddress,T_CStr_FileName);
  414. t_CStrIpAddress.Format("%d",m_Port);
  415. ::WritePrivateProfileString("Server","Port",t_CStrIpAddress,T_CStr_FileName) ;
  416. m_CtrlConnect.EnableWindow(false);
  417. m_CtrlCapture.EnableWindow(true);
  418. }
  419. else{
  420. m_CtrlList.AddString("Connect Server fail !  Please reset and try again!");
  421. }
  422. }
  423. void CCAMSCDlg::OnMENUHelp() 
  424. {
  425. // TODO: Add your command handler code here
  426. ShellExecute(NULL,"open","hh.exe", "CCAMSHelp.chm","",SW_SHOW );
  427. }