Main.pas
上传用户:rickyhu
上传日期:2007-05-27
资源大小:842k
文件大小:35k
源码类别:

控制台编程

开发平台:

Delphi

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // 2004 (C) Copyrights Reserved
  4. // Author:Aureala
  5. //
  6. ////////////////////////////////////////////////////////////////////////////////
  7. unit Main;
  8. interface
  9. uses
  10.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  11.   Dialogs, About, Menus, ToolWin, ComCtrls, StdCtrls, ExtCtrls,
  12.   jpeg, ImgList, IdIOHandler, IdIOHandlerSocket, IdTCPConnection,
  13.   IdTCPClient, IdAntiFreezeBase, IdAntiFreeze, IdIntercept, IdTCPServer,
  14.   IdComponent, IdServerIOHandler, IdServerIOHandlerSocket, IdBaseComponent,
  15.   IdThreadMgr, IdThreadMgrDefault, ShellApi, ValEdit, Grids, TeEngine,
  16.   Series, TeeProcs, Chart, UtilTools, DateUtils;
  17. const
  18.   MON_ITEM = [$4,$5,$10,$20,$21,$30..$33,$80,$81];
  19.   TRAYMSG = WM_USER + 1;
  20. type
  21.   TMainForm = class;
  22.   
  23.   TScanThread = class(TThread)
  24.   private
  25.     OwnerForm:TMainForm;
  26.   protected
  27.     procedure Execute();override;
  28.   public
  29.     constructor Create(TheForm:TMainForm);reintroduce;
  30.     function  IsValidClient(TmpAddr:String):Boolean;
  31.     procedure ScanClient();
  32.   end;
  33.   TMainForm = class(TForm)
  34.     MainMenu: TMainMenu;
  35.     PMSysOp: TPopupMenu;
  36.     ToolBar: TToolBar;
  37.     TBSysSetting: TToolButton;
  38.     TBManClient: TToolButton;
  39.     TBViewClient: TToolButton;
  40.     TBMonCpu: TToolButton;
  41.     TBMonMem: TToolButton;
  42.     TBMonProc: TToolButton;
  43.     TBMonFile: TToolButton;
  44.     TBMonNet: TToolButton;
  45.     StatusBar: TStatusBar;
  46.     M2: TMenuItem;
  47.     MManClient: TMenuItem;
  48.     MViewClient: TMenuItem;
  49.     M1: TMenuItem;
  50.     MMonHide: TMenuItem;
  51.     M1S: TMenuItem;
  52.     MExit: TMenuItem;
  53.     MSysSetting: TMenuItem;
  54.     M3: TMenuItem;
  55.     MMonCpu: TMenuItem;
  56.     MMonMem: TMenuItem;
  57.     MMonProc: TMenuItem;
  58.     MMonFile: TMenuItem;
  59.     MMonNet: TMenuItem;
  60.     M4: TMenuItem;
  61.     MManProc: TMenuItem;
  62.     MSendMsg: TMenuItem;
  63.     MSysOp: TMenuItem;
  64.     MShutdownOs: TMenuItem;
  65.     MRebootOs: TMenuItem;
  66.     MLogout: TMenuItem;
  67.     M5: TMenuItem;
  68.     MHelp: TMenuItem;
  69.     MAbout: TMenuItem;
  70.     PanelLeft: TPanel;
  71.     PanelRight: TPanel;
  72.     TBS1: TToolButton;
  73.     TBS2: TToolButton;
  74.     TBS4: TToolButton;
  75.     TreeView: TTreeView;
  76.     PanelSR: TPanel;
  77.     TBS3: TToolButton;
  78.     TBHelp: TToolButton;
  79.     PanelSL: TPanel;
  80.     PanelSB: TPanel;
  81.     ImageListMenu: TImageList;
  82.     ImageListToolbar: TImageList;
  83.     PageWork: TPageControl;
  84.     TSSysSetting: TTabSheet;
  85.     TSManClient: TTabSheet;
  86.     TSPanelShow: TTabSheet;
  87.     TSProc: TTabSheet;
  88.     TSClient: TTabSheet;
  89.     IdThreadMgrDefault1: TIdThreadMgrDefault;
  90.     IdServerIOHandlerSocket1: TIdServerIOHandlerSocket;
  91.     TCPReceiver: TIdTCPServer;
  92.     IdConnectionIntercept1: TIdConnectionIntercept;
  93.     IdAntiFreeze1: TIdAntiFreeze;
  94.     TCPSender: TIdTCPClient;
  95.     IdIOHandlerSocket1: TIdIOHandlerSocket;
  96.     LabelTop: TLabel;
  97.     PanelST: TPanel;
  98.     Label4: TLabel;
  99.     Splitter: TSplitter;
  100.     PMShutdownOs: TMenuItem;
  101.     PMLogout: TMenuItem;
  102.     PMRebootOs: TMenuItem;
  103.     Label6: TLabel;
  104.     Image3: TImage;
  105.     Label7: TLabel;
  106.     CBSaveToLog: TCheckBox;
  107.     GroupBox1: TGroupBox;
  108.     CBCpuMon: TCheckBox;
  109.     CBMemMon: TCheckBox;
  110.     CBProcMon: TCheckBox;
  111.     CBFileMon: TCheckBox;
  112.     CBNetMon: TCheckBox;
  113.     CBPeriodMon: TCheckBox;
  114.     DTEndMon: TDateTimePicker;
  115.     BtnMon: TButton;
  116.     BtnRefresh: TButton;
  117.     BtnViewLog: TButton;
  118.     Label11: TLabel;
  119.     Image6: TImage;
  120.     Label13: TLabel;
  121.     PMManProc: TMenuItem;
  122.     N20: TMenuItem;
  123.     PMSendMsg: TMenuItem;
  124.     CBViewItem: TComboBox;
  125.     Label14: TLabel;
  126.     Image10: TImage;
  127.     TSConsole: TTabSheet;
  128.     MConsole: TMenuItem;
  129.     PMConsole: TMenuItem;
  130.     Label8: TLabel;
  131.     Image4: TImage;
  132.     MemoConsole: TMemo;
  133.     CBClientMC: TComboBox;
  134.     Label16: TLabel;
  135.     CBClientC: TComboBox;
  136.     Label9: TLabel;
  137.     OpenDialog: TOpenDialog;
  138.     SaveDialog: TSaveDialog;
  139.     Label18: TLabel;
  140.     Image14: TImage;
  141.     LVUnderMon: TListView;
  142.     BtnAddClient: TButton;
  143.     BtnDeleteClient: TButton;
  144.     EditIpAdd: TEdit;
  145.     Image8: TImage;
  146.     Label19: TLabel;
  147.     Label22: TLabel;
  148.     CBClientP: TComboBox;
  149.     BtnTerminateProc: TButton;
  150.     LVProc: TListView;
  151.     BtnViewProc: TButton;
  152.     TBManProc: TToolButton;
  153.     TBConsole: TToolButton;
  154.     TBS5: TToolButton;
  155.     TBSendMsg: TToolButton;
  156.     Label15: TLabel;
  157.     Label23: TLabel;
  158.     BtnSaveSetting: TButton;
  159.     Image11: TImage;
  160.     EditScanInterval: TEdit;
  161.     CBCpuMonS: TCheckBox;
  162.     CBMemMonS: TCheckBox;
  163.     CBProcMonS: TCheckBox;
  164.     CBFileMonS: TCheckBox;
  165.     CBNetMonS: TCheckBox;
  166.     EditInterval: TEdit;
  167.     EditConsoleMaxLine: TEdit;
  168.     CBSaveToLogS: TCheckBox;
  169.     PMMon: TMenuItem;
  170.     Label3: TLabel;
  171.     MonTimer: TTimer;
  172.     MonBoard: TListView;
  173.     VLClient: TValueListEditor;
  174.     Image1: TImage;
  175.     Label1: TLabel;
  176.     BtnConsoleConn: TButton;
  177.     MemoConsoleShow: TMemo;
  178.     PopMemuTray: TPopupMenu;
  179.     PMShowForm: TMenuItem;
  180.     PMAbout: TMenuItem;
  181.     PMExitSys: TMenuItem;
  182.     N4: TMenuItem;
  183.     PMHelp: TMenuItem;
  184.     ImageTray: TImage;
  185.     procedure FormCreate(Sender: TObject);
  186.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  187.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  188.     procedure FormHide(Sender: TObject);
  189.     procedure FormShow(Sender: TObject);
  190.     procedure FormActivate(Sender: TObject);
  191.     procedure FormDeactivate(Sender: TObject);
  192.     procedure MSysSettingClick(Sender: TObject);
  193.     procedure MMonHideClick(Sender: TObject);
  194.     procedure MExitClick(Sender: TObject);
  195.     procedure MManClientClick(Sender: TObject);
  196.     procedure MViewClientClick(Sender: TObject);
  197.     procedure MMonCpuClick(Sender: TObject);
  198.     procedure MMonMemClick(Sender: TObject);
  199.     procedure MMonProcClick(Sender: TObject);
  200.     procedure MMonFileClick(Sender: TObject);
  201.     procedure MMonNetClick(Sender: TObject);
  202.     procedure MMonKeyboardMouseClick(Sender: TObject);
  203.     procedure MManProcClick(Sender: TObject);
  204.     procedure MLogoutClick(Sender: TObject);
  205.     procedure MShutdownOsClick(Sender: TObject);
  206.     procedure MRebootOsClick(Sender: TObject);
  207.     procedure MConsoleClick(Sender: TObject);
  208.     procedure MSendMsgClick(Sender: TObject);
  209.     procedure MHelpClick(Sender: TObject);
  210.     procedure MAboutClick(Sender: TObject);
  211.     procedure TBSysSettingClick(Sender: TObject);
  212.     procedure TBManClientClick(Sender: TObject);
  213.     procedure TBViewClientClick(Sender: TObject);
  214.     procedure TBMonCpuClick(Sender: TObject);
  215.     procedure TBMonMemClick(Sender: TObject);
  216.     procedure TBMonProcClick(Sender: TObject);
  217.     procedure TBMonFileClick(Sender: TObject);
  218.     procedure TBMonNetClick(Sender: TObject);
  219.     procedure TBManProcClick(Sender: TObject);
  220.     procedure TBConsoleClick(Sender: TObject);
  221.     procedure TBSendMsgClick(Sender: TObject);
  222.     procedure TBHelpClick(Sender: TObject);
  223.     procedure PMMonClick(Sender: TObject);
  224.     procedure PMManProcClick(Sender: TObject);
  225.     procedure PMConsoleClick(Sender: TObject);
  226.     procedure PMSendMsgClick(Sender: TObject);
  227.     procedure PMLogoutClick(Sender: TObject);
  228.     procedure PMShutdownOsClick(Sender: TObject);
  229.     procedure PMRebootOsClick(Sender: TObject);
  230.     procedure TreeViewDblClick(Sender: TObject);
  231.     procedure EditScanIntervalKeyUp(Sender: TObject; var Key: Word;
  232.       Shift: TShiftState);
  233.     procedure EditIntervalKeyUp(Sender: TObject; var Key: Word;
  234.       Shift: TShiftState);
  235.     procedure EditConsoleMaxLineKeyUp(Sender: TObject; var Key: Word;
  236.       Shift: TShiftState);
  237.     procedure BtnSaveSettingClick(Sender: TObject);
  238.     procedure BtnAddClientClick(Sender: TObject);
  239.     procedure BtnDeleteClientClick(Sender: TObject);
  240.     procedure CBClientMCChange(Sender: TObject);
  241.     procedure CBViewItemChange(Sender: TObject);
  242.     procedure BtnMonClick(Sender: TObject);
  243.     procedure BtnRefreshClick(Sender: TObject);
  244.     procedure BtnViewLogClick(Sender: TObject);
  245.     procedure CBPeriodMonClick(Sender: TObject);
  246.     procedure CBClientPChange(Sender: TObject);
  247.     procedure BtnViewProcClick(Sender: TObject);
  248.     procedure BtnTerminateProcClick(Sender: TObject);
  249.     procedure BtnConsoleConnClick(Sender: TObject);
  250.     procedure CBClientCChange(Sender: TObject);
  251.     procedure MemoConsoleKeyUp(Sender: TObject; var Key: Word;
  252.       Shift: TShiftState);
  253.     procedure TSSysSettingShow(Sender: TObject);
  254.     procedure TSSysSettingHide(Sender: TObject);
  255.     procedure TSManClientShow(Sender: TObject);
  256.     procedure TSManClientHide(Sender: TObject);
  257.     procedure TSPanelShowShow(Sender: TObject);
  258.     procedure TSPanelShowHide(Sender: TObject);
  259.     procedure TSFileShow(Sender: TObject);
  260.     procedure TSFileHide(Sender: TObject);
  261.     procedure TSProcShow(Sender: TObject);
  262.     procedure TSProcHide(Sender: TObject);
  263.     procedure TSClientShow(Sender: TObject);
  264.     procedure TSClientHide(Sender: TObject);
  265.     procedure TSSCreenShow(Sender: TObject);
  266.     procedure TSSCreenHide(Sender: TObject);
  267.     procedure TSConsoleShow(Sender: TObject);
  268.     procedure TSConsoleHide(Sender: TObject);
  269.     procedure MonTimerTimer(Sender: TObject);
  270.     procedure ExeTreeView();
  271.     procedure UpdateData(Addr:String;StrMsg:TStrings);
  272.     procedure BroadMessage(StrMsg:TStrings);
  273.     procedure SendCommand(StrCmd:TStrings;Addr:String);
  274.     procedure TCPReceiverConnect(AThread: TIdPeerThread);
  275.     procedure TCPReceiverDisconnect(AThread: TIdPeerThread);
  276.     procedure TCPReceiverExecute(AThread: TIdPeerThread);
  277.     procedure PMShowFormClick(Sender: TObject);
  278.     procedure PMAboutClick(Sender: TObject);
  279.     procedure PMExitSysClick(Sender: TObject);
  280.     procedure PMHelpClick(Sender: TObject);
  281.   private
  282.     ScanThread:TScanThread;
  283.     procedure TrayMessage(var message:TMessage); message TRAYMSG;
  284.   public
  285.     { Public declarations }
  286.   end;
  287. var
  288.   MainForm: TMainForm;
  289.   //parasm依次为:0-是否监视cpu,1-是否内存,2-是否进程,3-是否文件
  290.   //4-是否监视网络,5-扫描时间间隔,6-cpu、内存监视时间间隔
  291.   //7-控制台允许最大行数,8-监视时是否保存日志
  292.   Params:TStrings;
  293.   NotifyData:NOTIFYICONDATA;
  294. implementation
  295. uses Input, ShowLog;
  296. var
  297.   hnd:THandle;
  298. {$R *.dfm}
  299. procedure TMainForm.FormCreate(Sender: TObject);
  300. var
  301.   Count:Integer;
  302. begin
  303.   Count:=0;
  304.   while (Count<PageWork.PageCount) do
  305.   begin
  306.     PageWork.Pages[Count].TabVisible:=false;
  307.     Count:=Count+1;
  308.   end;
  309.   TSClient.Show;
  310.   LoadClientView(VLClient);
  311.   UpdateClient(CBClientMC);
  312.   CBClientMC.Items.Strings[0]:='全部';
  313.   CBClientMC.ItemIndex:=0;
  314.   UpdateClient(CBClientP);
  315.   UpdateClient(CBClientC);
  316.   Params:=LoadConfig();
  317.   CBCpuMon.Checked:=StrToBool(Params[0]);
  318.   CBMemMon.Checked:=StrToBool(Params[1]);
  319.   CBProcMon.Checked:=StrToBool(Params[2]);
  320.   CBFileMon.Checked:=StrToBool(Params[3]);
  321.   CBNetMon.Checked:=StrToBool(Params[4]);
  322.   CBSaveToLog.Checked:=StrToBool(Params[8]);
  323.   ScanThread:=TScanThread.Create(MainForm);
  324. end;
  325. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  326. begin
  327.   CanClose:=false;
  328.   MMonHide.Click;
  329. end;
  330. procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
  331. begin
  332.   ;
  333. end;
  334. procedure TMainForm.FormHide(Sender: TObject);
  335. begin
  336.   ;
  337. end;
  338. procedure TMainForm.FormShow(Sender: TObject);
  339. begin
  340.   ;
  341. end;
  342. procedure TMainForm.FormActivate(Sender: TObject);
  343. begin
  344.   ;
  345. end;
  346. procedure TMainForm.FormDeactivate(Sender: TObject);
  347. begin
  348.   ;
  349. end;
  350. procedure TMainForm.MSysSettingClick(Sender: TObject);
  351. begin
  352.   TSSysSetting.Show;
  353. end;
  354. procedure TMainForm.MMonHideClick(Sender: TObject);
  355. begin
  356.   NotifyData.cbSize:=SizeOf(NotifyIconData);
  357.   NotifyData.Wnd:=Handle;
  358.   NotifyData.uID:=0;
  359.   NotifyData.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
  360.   NotifyData.uCallbackMessage:=TRAYMSG;
  361.   NotifyData.hIcon:=ImageTray.Picture.Icon.Handle;
  362.   StrPLCopy(NotifyData.szTip,'计算机远程监控系统'+#10#13+'SPYHOLE - IVISIONAL',63);
  363.   Shell_NotifyIcon(NIM_ADD,@NotifyData);
  364.   Hide;
  365. end;
  366. procedure TMainForm.MExitClick(Sender: TObject);
  367. var
  368.   ResId:Integer;
  369. begin
  370.   ResId:=MessageDlg('确实退出监控?',mtConfirmation,[mbYes,mbNo],0);
  371.   if(ResId=mrYes) then
  372.   begin
  373.     try
  374.       Hide;
  375.       TCPReceiver.Active:=false;
  376.       TCPSender.Disconnect;
  377.       ScanThread.Terminate;
  378.       Shell_NotifyIcon(NIM_DELETE,@NotifyData);
  379.     except
  380.       ;
  381.     end;
  382.     Application.Terminate;
  383.   end
  384.   else if(ResId=mrNo) then
  385.     MMonHide.Click;
  386. end;
  387. procedure TMainForm.MManClientClick(Sender: TObject);
  388. begin
  389.   TSManClient.Show;
  390. end;
  391. procedure TMainForm.MViewClientClick(Sender: TObject);
  392. begin
  393.   TSClient.Show;
  394. end;
  395. procedure TMainForm.MMonCpuClick(Sender: TObject);
  396. begin
  397.   CBViewItem.ItemIndex:=1;
  398.   TSPanelShow.Show;
  399.   MonBoard.Items.Clear;
  400. end;
  401. procedure TMainForm.MMonMemClick(Sender: TObject);
  402. begin
  403.   CBViewItem.ItemIndex:=2;
  404.   TSPanelShow.Show;
  405.   MonBoard.Items.Clear;
  406. end;
  407. procedure TMainForm.MMonProcClick(Sender: TObject);
  408. begin
  409.   CBViewItem.ItemIndex:=3;
  410.   TSPanelShow.Show;
  411.   MonBoard.Items.Clear;
  412. end;
  413. procedure TMainForm.MMonFileClick(Sender: TObject);
  414. begin
  415.   CBViewItem.ItemIndex:=4;
  416.   TSPanelShow.Show;
  417.   MonBoard.Items.Clear;
  418. end;
  419. procedure TMainForm.MMonNetClick(Sender: TObject);
  420. begin
  421.   CBViewItem.ItemIndex:=5;
  422.   TSPanelShow.Show;
  423.   MonBoard.Items.Clear;
  424. end;
  425. procedure TMainForm.MMonKeyboardMouseClick(Sender: TObject);
  426. begin
  427.   CBViewItem.ItemIndex:=6;
  428.   TSPanelShow.Show;
  429.   MonBoard.Items.Clear;
  430. end;
  431. procedure TMainForm.MManProcClick(Sender: TObject);
  432. begin
  433.   TSProc.Show;
  434. end;
  435. procedure TMainForm.MLogoutClick(Sender: TObject);
  436. var
  437.   StrCmd:TStrings;
  438. begin
  439.   if(PageWork.ActivePage<>TSClient) then
  440.   begin
  441.     TSClient.Show;
  442.   end;
  443.   if(VLClient.Row<=0) then
  444.   begin
  445.     ShowMessage('请选择你要注销登陆的计算机。');
  446.     exit;
  447.   end;
  448.   if(MessageDlg(PAnsiChar('警告!确实要注销位于'+VLClient.Cells[0,VLClient.Row]
  449.     +'当前用户登陆吗?'),mtConfirmation,[mbYes,mbNo],0)=mrNo) then
  450.   begin
  451.     exit;
  452.   end;
  453.   StrCmd:=TStringList.Create;
  454.   StrCmd.Add('8');
  455.   SendCommand(StrCmd,VLClient.Cells[0,VLClient.Row]);
  456. end;
  457. procedure TMainForm.MShutdownOsClick(Sender: TObject);
  458. var
  459.   StrCmd:TStrings;
  460. begin
  461.   if(PageWork.ActivePage<>TSClient) then
  462.   begin
  463.     TSClient.Show;
  464.   end;
  465.   if(VLClient.Row<=0) then
  466.   begin
  467.     ShowMessage('请选择你要关闭的计算机。');
  468.     exit;
  469.   end;
  470.   if(MessageDlg(PAnsiChar('警告!确实要关闭计算机'+VLClient.Cells[0,VLClient.Row]
  471.     +'吗?'),mtConfirmation,[mbYes,mbNo],0)=mrNo) then
  472.   begin
  473.     exit;
  474.   end;
  475.   StrCmd:=TStringList.Create;
  476.   StrCmd.Add('7');
  477.   SendCommand(StrCmd,VLClient.Cells[0,VLClient.Row]);
  478. end;
  479. procedure TMainForm.MRebootOsClick(Sender: TObject);
  480. var
  481.   StrCmd:TStrings;
  482. begin
  483.   if(PageWork.ActivePage<>TSClient) then
  484.   begin
  485.     TSClient.Show;
  486.   end;
  487.   if(VLClient.Row<=0) then
  488.   begin
  489.     ShowMessage('请选择你要重启的计算机。');
  490.     exit;
  491.   end;
  492.   if(MessageDlg(PAnsiChar('警告!确实要重启计算机'+VLClient.Cells[0,VLClient.Row]
  493.     +'吗?'),mtConfirmation,[mbYes,mbNo],0)=mrNo) then
  494.   begin
  495.     exit;
  496.   end;
  497.   StrCmd:=TStringList.Create;
  498.   StrCmd.Add('6');
  499.   SendCommand(StrCmd,VLClient.Cells[0,VLClient.Row]);
  500. end;
  501. procedure TMainForm.MConsoleClick(Sender: TObject);
  502. begin
  503.   TSConsole.Show;
  504. end;
  505. procedure TMainForm.MSendMsgClick(Sender: TObject);
  506. var
  507.   InputForm:TinputForm;
  508.   StrCmd:TStrings;
  509.   Addr:String;
  510. begin
  511.   if(PageWork.ActivePage<>TSClient) then
  512.   begin
  513.     TSClient.Show;
  514.   end;
  515.   if(VLClient.Row<=0) then
  516.   begin
  517.     ShowMessage('请选择你要发送消息的计算机。');
  518.     exit;
  519.   end;
  520.   Addr:=VLClient.Cells[0,VLClient.Row];
  521.   InputForm:=TInputForm.Create(Self);
  522.   InputForm.Caption:='发送消息到:'+Addr;
  523.   InputForm.ShowModal;
  524.   if(InputForm.EditInput.Text<>'') then
  525.   begin
  526.     StrCmd:=TStringList.Create;
  527.     StrCmd.Add('b0|'+InputForm.EditInput.Text);
  528.     SendCommand(StrCmd,Addr);
  529.   end;
  530.   InputForm.Free;
  531. end;
  532. procedure TMainForm.MHelpClick(Sender: TObject);
  533. begin
  534.   ShellExecute(Self.WindowHandle,'open','.help.htm','','', SW_SHOWMAXIMIZED );
  535. end;
  536. procedure TMainForm.MAboutClick(Sender: TObject);
  537. var
  538.   AboutForm:TAboutForm;
  539. begin
  540.   AboutForm:=TAboutForm.Create(Self);
  541.   AboutForm.ShowModal;
  542. end;
  543. procedure TMainForm.TBSysSettingClick(Sender: TObject);
  544. begin
  545.   MSysSetting.Click;
  546. end;
  547. procedure TMainForm.TBManClientClick(Sender: TObject);
  548. begin
  549.   MManClient.Click;
  550. end;
  551. procedure TMainForm.TBViewClientClick(Sender: TObject);
  552. begin
  553.   MViewClient.Click;
  554. end;
  555. procedure TMainForm.TBMonCpuClick(Sender: TObject);
  556. begin
  557.   MMonCpu.Click;
  558. end;
  559. procedure TMainForm.TBMonMemClick(Sender: TObject);
  560. begin
  561.   MMonMem.Click;
  562. end;
  563. procedure TMainForm.TBMonProcClick(Sender: TObject);
  564. begin
  565.   MMonProc.Click;
  566. end;
  567. procedure TMainForm.TBMonFileClick(Sender: TObject);
  568. begin
  569.   MMonFile.Click;
  570. end;
  571. procedure TMainForm.TBMonNetClick(Sender: TObject);
  572. begin
  573.   MMonNet.Click;
  574. end;
  575. procedure TMainForm.TBManProcClick(Sender: TObject);
  576. begin
  577.   MManProc.Click;
  578. end;
  579. procedure TMainForm.TBConsoleClick(Sender: TObject);
  580. begin
  581.   MConsole.Click;
  582. end;
  583. procedure TMainForm.TBSendMsgClick(Sender: TObject);
  584. begin
  585.   MSendMsg.Click;
  586. end;
  587. procedure TMainForm.TBHelpClick(Sender: TObject);
  588. begin
  589.   MHelp.Click;
  590. end;
  591. procedure TMainForm.PMMonClick(Sender: TObject);
  592. begin
  593.   TSPanelShow.Show;
  594. end;
  595. procedure TMainForm.PMManProcClick(Sender: TObject);
  596. begin
  597.   MManProc.Click;
  598. end;
  599. procedure TMainForm.PMConsoleClick(Sender: TObject);
  600. begin
  601.   MConsole.Click;
  602. end;
  603. procedure TMainForm.PMSendMsgClick(Sender: TObject);
  604. begin
  605.   MSendMsg.Click;
  606. end;
  607. procedure TMainForm.PMLogoutClick(Sender: TObject);
  608. begin
  609.   MLogout.Click;
  610. end;
  611. procedure TMainForm.PMShutdownOsClick(Sender: TObject);
  612. begin
  613.   MShutdownOs.Click;
  614. end;
  615. procedure TMainForm.PMRebootOsClick(Sender: TObject);
  616. begin
  617.   MRebootOs.Click;
  618. end;
  619. procedure TMainForm.TreeViewDblClick(Sender: TObject);
  620. begin
  621.   ExeTreeView();
  622. end;
  623. procedure TMainForm.EditScanIntervalKeyUp(Sender: TObject; var Key: Word;
  624.   Shift: TShiftState);
  625. begin
  626.   if(not ValueBetween(EditScanInterval.Text,1,99999)) then
  627.   begin
  628.     EditScanInterval.Text:='1';
  629.   end;
  630. end;
  631. procedure TMainForm.EditIntervalKeyUp(Sender: TObject; var Key: Word;
  632.   Shift: TShiftState);
  633. begin
  634.   if(not ValueBetween(EditInterval.Text,10,99999)) then
  635.   begin
  636.     EditInterval.Text:='10';
  637.   end;
  638. end;
  639. procedure TMainForm.EditConsoleMaxLineKeyUp(Sender: TObject;
  640.   var Key: Word; Shift: TShiftState);
  641. begin
  642.   if(not ValueBetween(EditConsoleMaxLine.Text,200,300)) then
  643.   begin
  644.     EditConsoleMaxLine.Text:='200';
  645.   end;
  646. end;
  647. procedure TMainForm.BtnSaveSettingClick(Sender: TObject);
  648. begin
  649.   Params.Clear;
  650.   if(CBCpuMonS.Checked) then
  651.     Params.Add('true')
  652.   else
  653.     Params.Add('false');
  654.   if(CBMemMonS.Checked) then
  655.     Params.Add('true')
  656.   else
  657.     Params.Add('false');
  658.   if(CBProcMonS.Checked) then
  659.     Params.Add('true')
  660.   else
  661.     Params.Add('false');
  662.   if(CBFileMonS.Checked) then
  663.     Params.Add('true')
  664.   else
  665.     Params.Add('false');
  666.   if(CBNetMonS.Checked) then
  667.     Params.Add('true')
  668.   else
  669.     Params.Add('false');
  670.   Params.Add(EditScanInterval.Text);
  671.   Params.Add(EditInterval.Text);
  672.   Params.Add(EditConsoleMaxLine.Text);
  673.   if(CBSaveToLogS.Checked) then
  674.     Params.Add('true')
  675.   else
  676.     Params.Add('false');
  677.   SaveConfig(Params);
  678.   UpdateClient(CBClientMC);
  679.   CBClientMC.Items.Strings[0]:='全部';
  680.   CBClientMC.ItemIndex:=0;
  681.   UpdateClient(CBCLientP);
  682. end;
  683. procedure TMainForm.BtnAddClientClick(Sender: TObject);
  684. begin
  685.   if(not IsValidAddr(EditIpAdd.Text)) then
  686.   begin
  687.     ShowMessage('请输入正确的IP地址');
  688.     EditIpAdd.SetFocus;
  689.     exit;
  690.   end;
  691.   if(ExistClient(EditIpAdd.Text)) then
  692.   begin
  693.     ShowMessage('该计算机已经存在!');
  694.     exit;
  695.   end;
  696.   AddClient(EditIpAdd.Text);
  697.   ShowClients(LVUnderMon);
  698.   LoadClientView(VLClient);
  699. end;
  700. procedure TMainForm.BtnDeleteClientClick(Sender: TObject);
  701. begin
  702.   if(LVUnderMon.Selected=nil) then
  703.   begin
  704.     ShowMessage('请选择要永久取消监控的计算机');
  705.     exit;
  706.   end;
  707.   DelClient(LVUnderMon.Selected.SubItems.Strings[0]);
  708.   ShowClients(LVUnderMon);
  709.   LoadClientView(VLClient);
  710. end;
  711. procedure TMainForm.CBClientMCChange(Sender: TObject);
  712. begin
  713.   MonBoard.Items.Clear;
  714. end;
  715. procedure TMainForm.CBViewItemChange(Sender: TObject);
  716. begin
  717.   MonBoard.Items.Clear;
  718. end;
  719. procedure TMainForm.BtnMonClick(Sender: TObject);
  720. var
  721.   StrMsg:TStrings;
  722. begin
  723.   StrMsg:=TStringList.Create;
  724.   if(BtnMon.Caption='开始监视') then
  725.   begin
  726.     if(CBCpuMon.Checked) then
  727.       StrMsg.Add('50|'+Params[6])
  728.     else
  729.       StrMsg.Add('51');
  730.     if(CBMemMon.Checked) then
  731.       StrMsg.Add('40|'+Params[6])
  732.     else
  733.       StrMsg.Add('41');
  734.     if(CBProcMon.Checked) then
  735.       StrMsg.Add('20')
  736.     else
  737.       StrMsg.Add('21');
  738.     if(CBFileMon.Checked) then
  739.       StrMsg.Add('30')
  740.     else
  741.       StrMsg.Add('31');
  742.     if(CBNetMon.Checked) then
  743.       StrMsg.Add('80')
  744.     else
  745.       StrMsg.Add('81');
  746.     BroadMessage(StrMsg);
  747.     BtnMon.Caption:='停止监视';
  748.   end
  749.   else
  750.   begin
  751.     StrMsg.Add('4');
  752.     BroadMessage(StrMsg);
  753.     BtnMon.Caption:='开始监视';
  754.   end;
  755. end;
  756. procedure TMainForm.BtnRefreshClick(Sender: TObject);
  757. begin
  758.   if(BtnRefresh.Caption='停止刷新') then
  759.   begin
  760.     BtnRefresh.Caption:='自动刷新';
  761.   end
  762.   else
  763.   begin
  764.     BtnRefresh.Caption:='停止刷新';
  765.   end;
  766. end;
  767. procedure TMainForm.BtnViewLogClick(Sender: TObject);
  768. var
  769.   ShowForm:TShowLogForm;
  770. begin
  771.   ShowForm:=TShowLogForm.Create(Self);
  772.   ShowForm.ShowModal;
  773. end;
  774. procedure TMainForm.CBPeriodMonClick(Sender: TObject);
  775. var
  776.   SecondsTotal:Cardinal;
  777. begin
  778.   DTEndMon.Date:=NOW;
  779.   if(CBPeriodMon.Checked) then
  780.   begin
  781.     if(Time>DTEndMon.DateTime) then
  782.     begin
  783.       SecondsTotal:=SecondsBetween(NOW,Date+StrToDateTime('23:59:59'));
  784.       SecondsTotal:=SecondsTotal+
  785.         SecondsBetween(Date+StrToDateTime('00:00:00'),DTEndMon.Time);
  786.     end
  787.     else
  788.     begin
  789.       SecondsTotal:=SecondsBetween(NOW,DTEndMon.Time);
  790.     end;
  791.     MonTimer.Interval:=SecondsTotal;
  792.     MonTimer.Enabled:=true;
  793.   end
  794.   else
  795.   begin
  796.     MonTimer.Enabled:=false;
  797.   end;
  798. end;
  799. procedure TMainForm.CBClientPChange(Sender: TObject);
  800. begin
  801.   BtnViewProc.Click;
  802. end;
  803. procedure TMainForm.BtnViewProcClick(Sender: TObject);
  804. var
  805.   StrCmd:TStrings;
  806. begin
  807.   LVProc.Items.Clear;
  808.   if(CBClientP.Text='请选择计算机') then
  809.   begin
  810.     ShowMessage('请选择你要查看进程的计算机!');
  811.     exit;
  812.   end;
  813.   StrCmd:=TStringList.Create;
  814.   StrCmd.Add('22');
  815.   SendCommand(StrCmd,CBClientP.Text);
  816. end;
  817. procedure TMainForm.BtnTerminateProcClick(Sender: TObject);
  818. var
  819.   StrCmd:TStrings;
  820. begin
  821.   if(LVProc.Selected=nil) then
  822.   begin
  823.     ShowMessage('请选择你要关闭的进程!');
  824.     exit;
  825.   end;
  826.   StrCmd:=TStringList.Create;
  827.   StrCmd.Add('23|'+LVProc.Selected.SubItems.Strings[1]);
  828.   SendCommand(StrCmd,CBClientP.Text);
  829. end;
  830. procedure TMainForm.CBClientCChange(Sender: TObject);
  831. begin
  832.   BtnConsoleConn.Click;
  833. end;
  834. procedure TMainForm.MemoConsoleKeyUp(Sender: TObject; var Key: Word;
  835.   Shift: TShiftState);
  836. var
  837.   StrCmd:TStrings;
  838. begin
  839.   if(Key=VK_RETURN) then
  840.   begin
  841.     if(CBClientC.Text='请选择计算机') then
  842.     begin
  843.       ShowMessage('请先选择你要执行远程命令的计算机!');
  844.       exit;
  845.     end;
  846.     MemoConsoleShow.Lines.Add(' ');
  847.     MemoConsoleShow.Lines.Add(MemoConsole.Lines.Text);
  848.     MemoConsoleShow.Lines.Add(' ');
  849.     StrCmd:=TStringList.Create;
  850.     StrCmd.Add('a0|'+Trim(MemoConsole.Lines.Text));
  851.     SendCommand(StrCmd,CBClientC.Text);
  852.     MemoConsole.Clear;
  853.   end;
  854. end;
  855. procedure TMainForm.TSSysSettingShow(Sender: TObject);
  856. var
  857.   Params:TStrings;
  858. begin
  859.   Params:=TStringList.Create;
  860.   Params.AddStrings(LoadConfig);
  861.   CBCpuMonS.Checked:=StrToBool(Params.Strings[0]);
  862.   CBMemMonS.Checked:=StrToBool(Params.Strings[1]);
  863.   CBProcMonS.Checked:=StrToBool(Params.Strings[2]);
  864.   CBFileMonS.Checked:=StrToBool(Params.Strings[3]);
  865.   CBNetMonS.Checked:=StrToBool(Params.Strings[4]);
  866.   EditScanInterval.Text:=Params.Strings[5];
  867.   EditInterval.Text:=Params.Strings[6];
  868.   EditConsoleMaxLine.Text:=Params.Strings[7];
  869.   CBSaveToLogS.Checked:=StrToBool(Params.Strings[8]);
  870. end;
  871. procedure TMainForm.TSSysSettingHide(Sender: TObject);
  872. begin
  873.   ;
  874. end;
  875. procedure TMainForm.TSManClientShow(Sender: TObject);
  876. begin
  877.   ShowClients(LVUnderMon);
  878. end;
  879. procedure TMainForm.TSManClientHide(Sender: TObject);
  880. begin
  881.   ;
  882. end;
  883. procedure TMainForm.TSPanelShowShow(Sender: TObject);
  884. begin
  885.   ;
  886. end;
  887. procedure TMainForm.TSPanelShowHide(Sender: TObject);
  888. begin
  889.   ;
  890. end;
  891. procedure TMainForm.TSFileShow(Sender: TObject);
  892. begin
  893.   ;
  894. end;
  895. procedure TMainForm.TSFileHide(Sender: TObject);
  896. begin
  897.   ;
  898. end;
  899. procedure TMainForm.TSProcShow(Sender: TObject);
  900. begin
  901.   ;
  902. end;
  903. procedure TMainForm.TSProcHide(Sender: TObject);
  904. begin
  905.   ;
  906. end;
  907. procedure TMainForm.TSClientShow(Sender: TObject);
  908. begin
  909.   ;
  910. end;
  911. procedure TMainForm.TSClientHide(Sender: TObject);
  912. begin
  913.   ;
  914. end;
  915. procedure TMainForm.TSSCreenShow(Sender: TObject);
  916. begin
  917.   ;
  918. end;
  919. procedure TMainForm.TSSCreenHide(Sender: TObject);
  920. begin
  921.   ;
  922. end;
  923. procedure TMainForm.TSConsoleShow(Sender: TObject);
  924. begin
  925.   ;
  926. end;
  927. procedure TMainForm.TSConsoleHide(Sender: TObject);
  928. begin
  929.   ;
  930. end;
  931. procedure TMAinForm.ExeTreeView();
  932. var
  933.   StrSel:String;
  934. begin
  935.   StrSel:=TreeView.Selected.Text;
  936.   if(StrSel='系统设置') then
  937.     MSysSetting.Click
  938.   else if(StrSel='后台监控') then
  939.     MMonHide.Click
  940.   else if(StrSel='退出监控') then
  941.     Mexit.Click
  942.   else if(StrSel='管理计算机') then
  943.     MManClient.Click
  944.   else if(StrSel='查看计算机连接情况') then
  945.     MViewClient.Click
  946.   else if(StrSel='远程监视') then
  947.     PMMon.Click
  948.   else if(StrSel='CPU使用') then
  949.     MMonCpu.Click
  950.   else if(StrSel='内存使用') then
  951.     MMonMem.Click
  952.   else if(StrSel='进程创建、终止') then
  953.     MMonProc.Click
  954.   else if(StrSel='文件操作') then
  955.     MMonFile.Click
  956.   else if(StrSel='网络数据包') then
  957.     MMonNet.Click
  958.   else if(StrSel='进程管理') then
  959.     MManProc.Click
  960.   else if(StrSel='注销登陆') then
  961.     MLogout.Click
  962.   else if(StrSel='关闭计算机') then
  963.     MShutdownOs.Click
  964.   else if(StrSel='重启计算机') then
  965.     MRebootOs.Click
  966.   else if(StrSel='控制台命令') then
  967.     MConsole.Click
  968.   else if(StrSel='发送消息') then
  969.     MSendMsg.Click
  970.   else
  971.     ;
  972. end;
  973. procedure TMainForm.BroadMessage(StrMsg:TStrings);
  974. const
  975.   MAX_TRY_COUNT=5;
  976. var
  977.   Count:Integer;
  978.   TryCount:Integer;
  979.   MsgCount:Integer;
  980. begin
  981.   ScanThread.Suspend;
  982.   Count:=VLClient.Strings.Count-1;
  983.   while(Count>0) do
  984.   begin
  985.     for TryCount:=MAX_TRY_COUNT downto 0 do
  986.     begin
  987.       if(VLClient.Cells[1,Count]='是') then
  988.       begin
  989.         TCPSender.Host:=VLClient.Cells[0,Count];
  990.         try
  991.           TCPSender.Connect();
  992.           if(TCPSender.Connected=true) then
  993.           begin
  994.             for MsgCount:=0 to StrMsg.Count do
  995.             begin
  996.               TCPSender.WriteLn(StrMsg[MsgCount]+#10#10);
  997.             end;
  998.             break;
  999.           end;
  1000.         except
  1001.           ;
  1002.         end;
  1003.         TCPSender.Disconnect;
  1004.       end;
  1005.     end;
  1006.     Count:=Count-1;
  1007.   end;
  1008.   ScanThread.Resume;
  1009. end;
  1010. procedure TMainForm.SendCommand(StrCmd:TStrings;Addr:String);
  1011. const
  1012.   MAX_TRY_COUNT=5;
  1013. var
  1014.   Count:Integer;
  1015.   TryCount:Integer;
  1016. begin
  1017.   ScanThread.Suspend;
  1018.   TCPSender.Disconnect;
  1019.   TCPSender.Host:=Addr;
  1020.   for Count:=0 to StrCmd.Count-1 do
  1021.   begin
  1022.     try
  1023.       for TryCount:=MAX_TRY_COUNT downto 0 do
  1024.       begin
  1025.         if(TCPSender.Connected=true) then
  1026.         begin
  1027.           TCPSender.WriteLn(StrCmd[Count]+#10#10);
  1028.           break;
  1029.         end
  1030.         else
  1031.         begin
  1032.           TCPSender.Connect();
  1033.         end;
  1034.       end;
  1035.     except
  1036.       ;
  1037.     end;
  1038.   end;
  1039.   ScanThread.Resume;
  1040. end;
  1041. procedure TMainForm.TCPReceiverConnect(AThread: TIdPeerThread);
  1042. var
  1043.   StrCmd:TStrings;
  1044.   TmpAddr:String;
  1045. begin
  1046.   TmpAddr:=AThread.Connection.Socket.Binding.PeerIP;
  1047.   StatusBar.Panels.Items[2].Text:=TmpAddr+'已经连接';
  1048.   UpdateClientStatus(VLClient,TmpAddr,'是');  
  1049.   StrCmd:=TStringList.Create;
  1050.   if(CBCpuMon.Checked) then
  1051.     StrCmd.Add('50|'+Params[6]);
  1052.   if(CBMemMon.Checked) then
  1053.     StrCmd.Add('40|'+Params[6]);
  1054.   if(CBProcMon.Checked) then
  1055.     StrCmd.Add('20');
  1056.   if(CBFileMon.Checked) then
  1057.     StrCmd.Add('30');
  1058.   if(CBNetMon.Checked) then
  1059.       StrCmd.Add('80');
  1060.   SendCommand(StrCmd,TmpAddr); 
  1061. end;
  1062. procedure TMainForm.TCPReceiverDisconnect(AThread: TIdPeerThread);
  1063. var
  1064.   TmpAddr:String;
  1065. begin
  1066.   TmpAddr:=AThread.Connection.Socket.Binding.PeerIP;
  1067.   StatusBar.Panels.Items[2].Text:=TmpAddr+'断开连接';
  1068.   UpdateClientStatus(VLClient,TmpAddr,'否');
  1069. end;
  1070. procedure TMainForm.TCPReceiverExecute(AThread: TIdPeerThread);
  1071. var
  1072.   StrReceived,IpAddr:String;
  1073.   StrMsg:TStringList;
  1074. begin
  1075.   try
  1076.     IpAddr:=AThread.Connection.Socket.Binding.PeerIP;
  1077.     StrReceived:=AThread.Connection.ReadLn(#10#10);
  1078.     StrReceived:=Trim(StrReceived);
  1079.     if(CBSaveToLog.Checked) then
  1080.     begin
  1081.       SaveLog(IpAddr+'|'+StrReceived);//保存日志
  1082.     end;
  1083.     if(StrReceived[1]='a') then
  1084.     begin
  1085.       StrReceived[1]:=#13;
  1086.       if(MemoConsoleShow.Lines.Count>=StrToInt(Params[7])) then
  1087.         MemoConsoleShow.Lines.Delete(0);
  1088.       MemoConsoleShow.Lines.Add(StrReceived);
  1089.     end
  1090.     else
  1091.     begin
  1092.       StrMsg:=TStringList.Create;
  1093.       StrMsg.AddStrings(ExtractStr(StrReceived,'|'));
  1094.       UpdateData(IpAddr,StrMsg);
  1095.     end;
  1096.   finally
  1097.     ;
  1098.   end;
  1099. end;
  1100. procedure TMainForm.MonTimerTimer(Sender: TObject);
  1101. begin
  1102.   BtnMon.Caption:='停止监视';
  1103.   BtnMon.Click;
  1104. end;
  1105. constructor TScanThread.Create(TheForm:TMainForm);
  1106. begin
  1107.   OwnerForm:=TheForm;
  1108.   inherited Create(false);
  1109. end;
  1110. procedure TScanThread.Execute;
  1111. var
  1112.   Interval:Integer;
  1113. begin
  1114.   while not Terminated do
  1115.   begin
  1116.     ScanClient();
  1117.     Interval:=StrToInt(Params[5]);
  1118.     Sleep(Interval*1000);
  1119.   end;
  1120. end;
  1121. function TScanThread.IsValidClient(TmpAddr:String):Boolean;
  1122. begin
  1123.   MainForm.StatusBar.Panels.Items[1].Text:='扫描'+TmpAddr+'...';
  1124.   if(MainForm.TCPSender.Connected=true) then
  1125.   begin
  1126.     MainForm.TCPSender.Disconnect;
  1127.   end;
  1128.   MainForm.TCPSender.Host:=TmpAddr;
  1129.   try
  1130.     MainForm.TCPSender.Connect();
  1131.     if(MainForm.TCPSender.Connected=false) then
  1132.     begin
  1133.       result:=false;
  1134.       exit;
  1135.     end
  1136.     else
  1137.     begin
  1138.       MainForm.TCPSender.WriteLn('0|'+
  1139.         IntToStr(MainForm.TCPReceiver.DefaultPort)+#10#10);
  1140.     end;
  1141.   except
  1142.     MainForm.TCPSender.Disconnect;
  1143.     result:=false;
  1144.     exit;
  1145.   end;
  1146.   result:=true;
  1147. end;
  1148. procedure TScanThread.ScanClient();
  1149. var ClientAddr:String;
  1150.     N:Integer;
  1151. begin
  1152.   N:=MainForm.VLClient.Strings.Count-1;
  1153.   while(N>0) do
  1154.   begin
  1155.     ClientAddr:=MainForm.VLClient.Keys[N];
  1156.     if(IsValidClient(ClientAddr)) then
  1157.     begin
  1158.       MainForm.StatusBar.Panels.Items[1].Text:='与'
  1159.         +ClientAddr+'连接成功';
  1160.     end
  1161.     else
  1162.     begin
  1163.       MainForm.StatusBar.Panels.Items[1].Text:='与'
  1164.         +ClientAddr+'连接失败';
  1165.     end;
  1166.     N:=N-1;
  1167.   end;
  1168. end;
  1169. procedure TMainForm.UpdateData(Addr:String;StrMsg:TStrings);
  1170. var
  1171.   StrTmp:String;
  1172.   RetId,N,Count:Integer;
  1173. begin
  1174.   RetId:=StrToInt('$'+StrMsg[1]);
  1175.   if(RetId in MON_ITEM) then
  1176.   begin
  1177.     if(BtnRefresh.Caption<>'停止刷新') then
  1178.     begin
  1179.       exit;
  1180.     end;
  1181.     if(Addr=CBClientMC.Text) or (CBClientMC.Text='全部') then
  1182.     begin
  1183.       StrTmp:='';
  1184.     if(RetId in [$20,$21]) and
  1185.       ((CBViewItem.ItemIndex=3) or (CBViewItem.ItemIndex=0)) then
  1186.     begin
  1187.       if(RetId=$20) then
  1188.         StrTmp:=StrTmp+'创建:'
  1189.       else
  1190.         StrTmp:=StrTmp+'终止:';
  1191.       StrTmp:=StrTmp+'进程号-'+StrMsg[2];
  1192.       StrTmp:=StrTmp+',进程文件-';
  1193.       StrTmp:=StrTmp+StrMsg[3];
  1194.     end
  1195.     else if(RetId in [$30..$33]) and
  1196.       ((CBViewItem.ItemIndex=4) or (CBViewItem.ItemIndex=0)) then
  1197.     begin
  1198.       case RetId of
  1199.         $30:StrTmp:=StrTmp+'新建文件:';
  1200.         $31:StrTmp:=StrTmp+'删除文件:';
  1201.         $32:StrTmp:=StrTmp+'文件更新:';
  1202.         $33:StrTmp:=StrTmp+'文件更名:';
  1203.       end;
  1204.       if(RetId<>$33) then
  1205.         StrTmp:=StrTmp+StrMsg[2]
  1206.       else
  1207.         StrTmp:=StrTmp+StrMsg[2]+'更名为'+StrMsg[3];
  1208.       end
  1209.     else if(RetId=$4) and
  1210.       ((CBViewItem.ItemIndex=2) or (CBViewItem.ItemIndex=0)) then
  1211.     begin
  1212.       StrTmp:=StrTmp+'内存使用率:百分之'+StrMsg[2]
  1213.         +',可用物理内存'+StrMsg[3]+'兆';
  1214.     end
  1215.     else if(RetId=$5) and
  1216.       ((CBViewItem.ItemIndex=1) or (CBViewItem.ItemIndex=0)) then
  1217.     begin
  1218.       StrTmp:=StrTmp+'CPU使用率:百分之'+StrMsg[2];
  1219.     end
  1220.     else if(RetId in [$80,$81]) and
  1221.       ((CBViewItem.ItemIndex=5) or (CBViewItem.ItemIndex=0)) then
  1222.     begin
  1223.       StrTmp:=StrTmp+'网络数据包:';
  1224.       if(RetId=$80) then
  1225.         StrTmp:=StrTmp+'收'
  1226.       else
  1227.         StrTmp:=StrTmp+'发';
  1228.       StrTmp:=StrTmp+',数目:'+StrMsg[2];
  1229.       StrTmp:=StrTmp+',协议:'+StrMsg[3];
  1230.       StrTmp:=StrTmp+',远程IP:'+StrMsg[4];
  1231.       StrTmp:=StrTmp+',目标端口:'+StrMsg[5];
  1232.       StrTmp:=StrTmp+',包大小:'+StrMsg[6];
  1233.     end;
  1234.     if(StrTmp='') then
  1235.     begin
  1236.       exit;
  1237.     end;
  1238.     MonBoard.Items.Add.SubItems.Add('来自:'+Addr+',时间:'
  1239.     +StrMsg[0]);
  1240.     MonBoard.Items.Add.SubItems.Add(StrTmp);
  1241.     Count:=MonBoard.Items.Count-StrToInt(Params[7]);
  1242.     if(Count>0) then
  1243.     begin
  1244.       N:=0;
  1245.       while(N<Count) do
  1246.       begin
  1247.         MonBoard.Items.Delete(N);
  1248.         N:=N+1;
  1249.         end;
  1250.       end;
  1251.     end;
  1252.   end
  1253.   else
  1254.   begin
  1255.     case RetId of
  1256.       $22://进程列表
  1257.         begin
  1258.           N:=2;
  1259.           Count:=StrMsg.Count;
  1260.           LVProc.Items.Clear;
  1261.           while(N<Count) do
  1262.           begin
  1263.             with LVProc.Items.Add do
  1264.             begin
  1265.               try
  1266.                 SubItems.Add(StrMsg[N+1]);
  1267.                 SubItems.Add(StrMsg[N]);
  1268.                 SubItems.Add(StrMsg[N+2]);
  1269.               except
  1270.                 break;
  1271.               end;
  1272.             end;
  1273.             N:=N+3;
  1274.           end;
  1275.         end;
  1276.       $23://关闭进程
  1277.         begin
  1278.           if(StrMsg[2]='0') then
  1279.             ShowMessage('成功关闭进程!')
  1280.           else
  1281.             ShowMessage('关闭进程失败!');
  1282.           BtnViewProc.Click;
  1283.         end;
  1284.     else
  1285.       ;
  1286.     end;
  1287.   end;
  1288. end;
  1289. procedure TMainForm.BtnConsoleConnClick(Sender: TObject);
  1290. var
  1291.   StrCmd:TStrings;
  1292. begin
  1293.   if(CBClientC.Text='请选择计算机') then
  1294.   begin
  1295.     ShowMessage('请选择你要执行远程控制台的计算机!');
  1296.     exit;
  1297.   end;
  1298.   MemoConsoleShow.Lines.Clear;
  1299.   MemoConsoleShow.Lines.Add(' ');
  1300.   MemoConsoleShow.Lines.Add('SPYHOLE V 2.0 of IVISIONAL');
  1301.   MemoConsoleShow.Lines.Add('2004  ');
  1302.   MemoConsoleShow.Lines.Add(' ');
  1303.   StrCmd:=TStringList.Create;
  1304.   StrCmd.Add('a0|');
  1305.   SendCommand(StrCmd,CBClientC.Text);
  1306. end;
  1307. procedure TMainForm.TrayMessage(var message:TMessage);
  1308. var
  1309.   CurPoint:Tpoint;
  1310. begin
  1311.   Inherited;
  1312.   if(message.LParam=WM_RBUTTONUP) then
  1313.   begin
  1314.     GetCursorPos(CurPoint);
  1315.     SetForegroundWindow(Self.Handle);
  1316.     PopMemuTray.Popup(CurPoint.X,CurPoint.Y);
  1317.   end;
  1318.   message.Result:=0;
  1319. end;
  1320. procedure TMainForm.PMShowFormClick(Sender: TObject);
  1321. begin
  1322.   MainForm.Show;
  1323.   Shell_NotifyIcon(NIM_DELETE,@NotifyData);
  1324. end;
  1325. procedure TMainForm.PMAboutClick(Sender: TObject);
  1326. begin
  1327.   MAbout.Click;
  1328. end;
  1329. procedure TMainForm.PMExitSysClick(Sender: TObject);
  1330. begin
  1331.   MExit.Click;
  1332. end;
  1333. procedure TMainForm.PMHelpClick(Sender: TObject);
  1334. begin
  1335.   MHelp.Click;
  1336. end;
  1337. initialization
  1338.   hnd:=CreateMutex(nil,True,'SpyHole2.0监控');
  1339.   if(GetLastError=ERROR_ALREADY_EXISTS) then
  1340.   begin
  1341.     Halt;
  1342.   end;
  1343. finalization
  1344.   if(hnd<>0) then
  1345.     CloseHandle(hnd);
  1346. end.