Main.pas
资源名称:计算机远程监控.rar [点击查看]
上传用户:rickyhu
上传日期:2007-05-27
资源大小:842k
文件大小:35k
源码类别:
控制台编程
开发平台:
Delphi
- ////////////////////////////////////////////////////////////////////////////////
- //
- // 2004 (C) Copyrights Reserved
- // Author:Aureala
- //
- ////////////////////////////////////////////////////////////////////////////////
- unit Main;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, About, Menus, ToolWin, ComCtrls, StdCtrls, ExtCtrls,
- jpeg, ImgList, IdIOHandler, IdIOHandlerSocket, IdTCPConnection,
- IdTCPClient, IdAntiFreezeBase, IdAntiFreeze, IdIntercept, IdTCPServer,
- IdComponent, IdServerIOHandler, IdServerIOHandlerSocket, IdBaseComponent,
- IdThreadMgr, IdThreadMgrDefault, ShellApi, ValEdit, Grids, TeEngine,
- Series, TeeProcs, Chart, UtilTools, DateUtils;
- const
- MON_ITEM = [$4,$5,$10,$20,$21,$30..$33,$80,$81];
- TRAYMSG = WM_USER + 1;
- type
- TMainForm = class;
- TScanThread = class(TThread)
- private
- OwnerForm:TMainForm;
- protected
- procedure Execute();override;
- public
- constructor Create(TheForm:TMainForm);reintroduce;
- function IsValidClient(TmpAddr:String):Boolean;
- procedure ScanClient();
- end;
- TMainForm = class(TForm)
- MainMenu: TMainMenu;
- PMSysOp: TPopupMenu;
- ToolBar: TToolBar;
- TBSysSetting: TToolButton;
- TBManClient: TToolButton;
- TBViewClient: TToolButton;
- TBMonCpu: TToolButton;
- TBMonMem: TToolButton;
- TBMonProc: TToolButton;
- TBMonFile: TToolButton;
- TBMonNet: TToolButton;
- StatusBar: TStatusBar;
- M2: TMenuItem;
- MManClient: TMenuItem;
- MViewClient: TMenuItem;
- M1: TMenuItem;
- MMonHide: TMenuItem;
- M1S: TMenuItem;
- MExit: TMenuItem;
- MSysSetting: TMenuItem;
- M3: TMenuItem;
- MMonCpu: TMenuItem;
- MMonMem: TMenuItem;
- MMonProc: TMenuItem;
- MMonFile: TMenuItem;
- MMonNet: TMenuItem;
- M4: TMenuItem;
- MManProc: TMenuItem;
- MSendMsg: TMenuItem;
- MSysOp: TMenuItem;
- MShutdownOs: TMenuItem;
- MRebootOs: TMenuItem;
- MLogout: TMenuItem;
- M5: TMenuItem;
- MHelp: TMenuItem;
- MAbout: TMenuItem;
- PanelLeft: TPanel;
- PanelRight: TPanel;
- TBS1: TToolButton;
- TBS2: TToolButton;
- TBS4: TToolButton;
- TreeView: TTreeView;
- PanelSR: TPanel;
- TBS3: TToolButton;
- TBHelp: TToolButton;
- PanelSL: TPanel;
- PanelSB: TPanel;
- ImageListMenu: TImageList;
- ImageListToolbar: TImageList;
- PageWork: TPageControl;
- TSSysSetting: TTabSheet;
- TSManClient: TTabSheet;
- TSPanelShow: TTabSheet;
- TSProc: TTabSheet;
- TSClient: TTabSheet;
- IdThreadMgrDefault1: TIdThreadMgrDefault;
- IdServerIOHandlerSocket1: TIdServerIOHandlerSocket;
- TCPReceiver: TIdTCPServer;
- IdConnectionIntercept1: TIdConnectionIntercept;
- IdAntiFreeze1: TIdAntiFreeze;
- TCPSender: TIdTCPClient;
- IdIOHandlerSocket1: TIdIOHandlerSocket;
- LabelTop: TLabel;
- PanelST: TPanel;
- Label4: TLabel;
- Splitter: TSplitter;
- PMShutdownOs: TMenuItem;
- PMLogout: TMenuItem;
- PMRebootOs: TMenuItem;
- Label6: TLabel;
- Image3: TImage;
- Label7: TLabel;
- CBSaveToLog: TCheckBox;
- GroupBox1: TGroupBox;
- CBCpuMon: TCheckBox;
- CBMemMon: TCheckBox;
- CBProcMon: TCheckBox;
- CBFileMon: TCheckBox;
- CBNetMon: TCheckBox;
- CBPeriodMon: TCheckBox;
- DTEndMon: TDateTimePicker;
- BtnMon: TButton;
- BtnRefresh: TButton;
- BtnViewLog: TButton;
- Label11: TLabel;
- Image6: TImage;
- Label13: TLabel;
- PMManProc: TMenuItem;
- N20: TMenuItem;
- PMSendMsg: TMenuItem;
- CBViewItem: TComboBox;
- Label14: TLabel;
- Image10: TImage;
- TSConsole: TTabSheet;
- MConsole: TMenuItem;
- PMConsole: TMenuItem;
- Label8: TLabel;
- Image4: TImage;
- MemoConsole: TMemo;
- CBClientMC: TComboBox;
- Label16: TLabel;
- CBClientC: TComboBox;
- Label9: TLabel;
- OpenDialog: TOpenDialog;
- SaveDialog: TSaveDialog;
- Label18: TLabel;
- Image14: TImage;
- LVUnderMon: TListView;
- BtnAddClient: TButton;
- BtnDeleteClient: TButton;
- EditIpAdd: TEdit;
- Image8: TImage;
- Label19: TLabel;
- Label22: TLabel;
- CBClientP: TComboBox;
- BtnTerminateProc: TButton;
- LVProc: TListView;
- BtnViewProc: TButton;
- TBManProc: TToolButton;
- TBConsole: TToolButton;
- TBS5: TToolButton;
- TBSendMsg: TToolButton;
- Label15: TLabel;
- Label23: TLabel;
- BtnSaveSetting: TButton;
- Image11: TImage;
- EditScanInterval: TEdit;
- CBCpuMonS: TCheckBox;
- CBMemMonS: TCheckBox;
- CBProcMonS: TCheckBox;
- CBFileMonS: TCheckBox;
- CBNetMonS: TCheckBox;
- EditInterval: TEdit;
- EditConsoleMaxLine: TEdit;
- CBSaveToLogS: TCheckBox;
- PMMon: TMenuItem;
- Label3: TLabel;
- MonTimer: TTimer;
- MonBoard: TListView;
- VLClient: TValueListEditor;
- Image1: TImage;
- Label1: TLabel;
- BtnConsoleConn: TButton;
- MemoConsoleShow: TMemo;
- PopMemuTray: TPopupMenu;
- PMShowForm: TMenuItem;
- PMAbout: TMenuItem;
- PMExitSys: TMenuItem;
- N4: TMenuItem;
- PMHelp: TMenuItem;
- ImageTray: TImage;
- procedure FormCreate(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure FormHide(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- procedure FormDeactivate(Sender: TObject);
- procedure MSysSettingClick(Sender: TObject);
- procedure MMonHideClick(Sender: TObject);
- procedure MExitClick(Sender: TObject);
- procedure MManClientClick(Sender: TObject);
- procedure MViewClientClick(Sender: TObject);
- procedure MMonCpuClick(Sender: TObject);
- procedure MMonMemClick(Sender: TObject);
- procedure MMonProcClick(Sender: TObject);
- procedure MMonFileClick(Sender: TObject);
- procedure MMonNetClick(Sender: TObject);
- procedure MMonKeyboardMouseClick(Sender: TObject);
- procedure MManProcClick(Sender: TObject);
- procedure MLogoutClick(Sender: TObject);
- procedure MShutdownOsClick(Sender: TObject);
- procedure MRebootOsClick(Sender: TObject);
- procedure MConsoleClick(Sender: TObject);
- procedure MSendMsgClick(Sender: TObject);
- procedure MHelpClick(Sender: TObject);
- procedure MAboutClick(Sender: TObject);
- procedure TBSysSettingClick(Sender: TObject);
- procedure TBManClientClick(Sender: TObject);
- procedure TBViewClientClick(Sender: TObject);
- procedure TBMonCpuClick(Sender: TObject);
- procedure TBMonMemClick(Sender: TObject);
- procedure TBMonProcClick(Sender: TObject);
- procedure TBMonFileClick(Sender: TObject);
- procedure TBMonNetClick(Sender: TObject);
- procedure TBManProcClick(Sender: TObject);
- procedure TBConsoleClick(Sender: TObject);
- procedure TBSendMsgClick(Sender: TObject);
- procedure TBHelpClick(Sender: TObject);
- procedure PMMonClick(Sender: TObject);
- procedure PMManProcClick(Sender: TObject);
- procedure PMConsoleClick(Sender: TObject);
- procedure PMSendMsgClick(Sender: TObject);
- procedure PMLogoutClick(Sender: TObject);
- procedure PMShutdownOsClick(Sender: TObject);
- procedure PMRebootOsClick(Sender: TObject);
- procedure TreeViewDblClick(Sender: TObject);
- procedure EditScanIntervalKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure EditIntervalKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure EditConsoleMaxLineKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure BtnSaveSettingClick(Sender: TObject);
- procedure BtnAddClientClick(Sender: TObject);
- procedure BtnDeleteClientClick(Sender: TObject);
- procedure CBClientMCChange(Sender: TObject);
- procedure CBViewItemChange(Sender: TObject);
- procedure BtnMonClick(Sender: TObject);
- procedure BtnRefreshClick(Sender: TObject);
- procedure BtnViewLogClick(Sender: TObject);
- procedure CBPeriodMonClick(Sender: TObject);
- procedure CBClientPChange(Sender: TObject);
- procedure BtnViewProcClick(Sender: TObject);
- procedure BtnTerminateProcClick(Sender: TObject);
- procedure BtnConsoleConnClick(Sender: TObject);
- procedure CBClientCChange(Sender: TObject);
- procedure MemoConsoleKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure TSSysSettingShow(Sender: TObject);
- procedure TSSysSettingHide(Sender: TObject);
- procedure TSManClientShow(Sender: TObject);
- procedure TSManClientHide(Sender: TObject);
- procedure TSPanelShowShow(Sender: TObject);
- procedure TSPanelShowHide(Sender: TObject);
- procedure TSFileShow(Sender: TObject);
- procedure TSFileHide(Sender: TObject);
- procedure TSProcShow(Sender: TObject);
- procedure TSProcHide(Sender: TObject);
- procedure TSClientShow(Sender: TObject);
- procedure TSClientHide(Sender: TObject);
- procedure TSSCreenShow(Sender: TObject);
- procedure TSSCreenHide(Sender: TObject);
- procedure TSConsoleShow(Sender: TObject);
- procedure TSConsoleHide(Sender: TObject);
- procedure MonTimerTimer(Sender: TObject);
- procedure ExeTreeView();
- procedure UpdateData(Addr:String;StrMsg:TStrings);
- procedure BroadMessage(StrMsg:TStrings);
- procedure SendCommand(StrCmd:TStrings;Addr:String);
- procedure TCPReceiverConnect(AThread: TIdPeerThread);
- procedure TCPReceiverDisconnect(AThread: TIdPeerThread);
- procedure TCPReceiverExecute(AThread: TIdPeerThread);
- procedure PMShowFormClick(Sender: TObject);
- procedure PMAboutClick(Sender: TObject);
- procedure PMExitSysClick(Sender: TObject);
- procedure PMHelpClick(Sender: TObject);
- private
- ScanThread:TScanThread;
- procedure TrayMessage(var message:TMessage); message TRAYMSG;
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- //parasm依次为:0-是否监视cpu,1-是否内存,2-是否进程,3-是否文件
- //4-是否监视网络,5-扫描时间间隔,6-cpu、内存监视时间间隔
- //7-控制台允许最大行数,8-监视时是否保存日志
- Params:TStrings;
- NotifyData:NOTIFYICONDATA;
- implementation
- uses Input, ShowLog;
- var
- hnd:THandle;
- {$R *.dfm}
- procedure TMainForm.FormCreate(Sender: TObject);
- var
- Count:Integer;
- begin
- Count:=0;
- while (Count<PageWork.PageCount) do
- begin
- PageWork.Pages[Count].TabVisible:=false;
- Count:=Count+1;
- end;
- TSClient.Show;
- LoadClientView(VLClient);
- UpdateClient(CBClientMC);
- CBClientMC.Items.Strings[0]:='全部';
- CBClientMC.ItemIndex:=0;
- UpdateClient(CBClientP);
- UpdateClient(CBClientC);
- Params:=LoadConfig();
- CBCpuMon.Checked:=StrToBool(Params[0]);
- CBMemMon.Checked:=StrToBool(Params[1]);
- CBProcMon.Checked:=StrToBool(Params[2]);
- CBFileMon.Checked:=StrToBool(Params[3]);
- CBNetMon.Checked:=StrToBool(Params[4]);
- CBSaveToLog.Checked:=StrToBool(Params[8]);
- ScanThread:=TScanThread.Create(MainForm);
- end;
- procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- begin
- CanClose:=false;
- MMonHide.Click;
- end;
- procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
- begin
- ;
- end;
- procedure TMainForm.FormHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.FormShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.FormActivate(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.FormDeactivate(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.MSysSettingClick(Sender: TObject);
- begin
- TSSysSetting.Show;
- end;
- procedure TMainForm.MMonHideClick(Sender: TObject);
- begin
- NotifyData.cbSize:=SizeOf(NotifyIconData);
- NotifyData.Wnd:=Handle;
- NotifyData.uID:=0;
- NotifyData.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
- NotifyData.uCallbackMessage:=TRAYMSG;
- NotifyData.hIcon:=ImageTray.Picture.Icon.Handle;
- StrPLCopy(NotifyData.szTip,'计算机远程监控系统'+#10#13+'SPYHOLE - IVISIONAL',63);
- Shell_NotifyIcon(NIM_ADD,@NotifyData);
- Hide;
- end;
- procedure TMainForm.MExitClick(Sender: TObject);
- var
- ResId:Integer;
- begin
- ResId:=MessageDlg('确实退出监控?',mtConfirmation,[mbYes,mbNo],0);
- if(ResId=mrYes) then
- begin
- try
- Hide;
- TCPReceiver.Active:=false;
- TCPSender.Disconnect;
- ScanThread.Terminate;
- Shell_NotifyIcon(NIM_DELETE,@NotifyData);
- except
- ;
- end;
- Application.Terminate;
- end
- else if(ResId=mrNo) then
- MMonHide.Click;
- end;
- procedure TMainForm.MManClientClick(Sender: TObject);
- begin
- TSManClient.Show;
- end;
- procedure TMainForm.MViewClientClick(Sender: TObject);
- begin
- TSClient.Show;
- end;
- procedure TMainForm.MMonCpuClick(Sender: TObject);
- begin
- CBViewItem.ItemIndex:=1;
- TSPanelShow.Show;
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.MMonMemClick(Sender: TObject);
- begin
- CBViewItem.ItemIndex:=2;
- TSPanelShow.Show;
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.MMonProcClick(Sender: TObject);
- begin
- CBViewItem.ItemIndex:=3;
- TSPanelShow.Show;
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.MMonFileClick(Sender: TObject);
- begin
- CBViewItem.ItemIndex:=4;
- TSPanelShow.Show;
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.MMonNetClick(Sender: TObject);
- begin
- CBViewItem.ItemIndex:=5;
- TSPanelShow.Show;
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.MMonKeyboardMouseClick(Sender: TObject);
- begin
- CBViewItem.ItemIndex:=6;
- TSPanelShow.Show;
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.MManProcClick(Sender: TObject);
- begin
- TSProc.Show;
- end;
- procedure TMainForm.MLogoutClick(Sender: TObject);
- var
- StrCmd:TStrings;
- begin
- if(PageWork.ActivePage<>TSClient) then
- begin
- TSClient.Show;
- end;
- if(VLClient.Row<=0) then
- begin
- ShowMessage('请选择你要注销登陆的计算机。');
- exit;
- end;
- if(MessageDlg(PAnsiChar('警告!确实要注销位于'+VLClient.Cells[0,VLClient.Row]
- +'当前用户登陆吗?'),mtConfirmation,[mbYes,mbNo],0)=mrNo) then
- begin
- exit;
- end;
- StrCmd:=TStringList.Create;
- StrCmd.Add('8');
- SendCommand(StrCmd,VLClient.Cells[0,VLClient.Row]);
- end;
- procedure TMainForm.MShutdownOsClick(Sender: TObject);
- var
- StrCmd:TStrings;
- begin
- if(PageWork.ActivePage<>TSClient) then
- begin
- TSClient.Show;
- end;
- if(VLClient.Row<=0) then
- begin
- ShowMessage('请选择你要关闭的计算机。');
- exit;
- end;
- if(MessageDlg(PAnsiChar('警告!确实要关闭计算机'+VLClient.Cells[0,VLClient.Row]
- +'吗?'),mtConfirmation,[mbYes,mbNo],0)=mrNo) then
- begin
- exit;
- end;
- StrCmd:=TStringList.Create;
- StrCmd.Add('7');
- SendCommand(StrCmd,VLClient.Cells[0,VLClient.Row]);
- end;
- procedure TMainForm.MRebootOsClick(Sender: TObject);
- var
- StrCmd:TStrings;
- begin
- if(PageWork.ActivePage<>TSClient) then
- begin
- TSClient.Show;
- end;
- if(VLClient.Row<=0) then
- begin
- ShowMessage('请选择你要重启的计算机。');
- exit;
- end;
- if(MessageDlg(PAnsiChar('警告!确实要重启计算机'+VLClient.Cells[0,VLClient.Row]
- +'吗?'),mtConfirmation,[mbYes,mbNo],0)=mrNo) then
- begin
- exit;
- end;
- StrCmd:=TStringList.Create;
- StrCmd.Add('6');
- SendCommand(StrCmd,VLClient.Cells[0,VLClient.Row]);
- end;
- procedure TMainForm.MConsoleClick(Sender: TObject);
- begin
- TSConsole.Show;
- end;
- procedure TMainForm.MSendMsgClick(Sender: TObject);
- var
- InputForm:TinputForm;
- StrCmd:TStrings;
- Addr:String;
- begin
- if(PageWork.ActivePage<>TSClient) then
- begin
- TSClient.Show;
- end;
- if(VLClient.Row<=0) then
- begin
- ShowMessage('请选择你要发送消息的计算机。');
- exit;
- end;
- Addr:=VLClient.Cells[0,VLClient.Row];
- InputForm:=TInputForm.Create(Self);
- InputForm.Caption:='发送消息到:'+Addr;
- InputForm.ShowModal;
- if(InputForm.EditInput.Text<>'') then
- begin
- StrCmd:=TStringList.Create;
- StrCmd.Add('b0|'+InputForm.EditInput.Text);
- SendCommand(StrCmd,Addr);
- end;
- InputForm.Free;
- end;
- procedure TMainForm.MHelpClick(Sender: TObject);
- begin
- ShellExecute(Self.WindowHandle,'open','.help.htm','','', SW_SHOWMAXIMIZED );
- end;
- procedure TMainForm.MAboutClick(Sender: TObject);
- var
- AboutForm:TAboutForm;
- begin
- AboutForm:=TAboutForm.Create(Self);
- AboutForm.ShowModal;
- end;
- procedure TMainForm.TBSysSettingClick(Sender: TObject);
- begin
- MSysSetting.Click;
- end;
- procedure TMainForm.TBManClientClick(Sender: TObject);
- begin
- MManClient.Click;
- end;
- procedure TMainForm.TBViewClientClick(Sender: TObject);
- begin
- MViewClient.Click;
- end;
- procedure TMainForm.TBMonCpuClick(Sender: TObject);
- begin
- MMonCpu.Click;
- end;
- procedure TMainForm.TBMonMemClick(Sender: TObject);
- begin
- MMonMem.Click;
- end;
- procedure TMainForm.TBMonProcClick(Sender: TObject);
- begin
- MMonProc.Click;
- end;
- procedure TMainForm.TBMonFileClick(Sender: TObject);
- begin
- MMonFile.Click;
- end;
- procedure TMainForm.TBMonNetClick(Sender: TObject);
- begin
- MMonNet.Click;
- end;
- procedure TMainForm.TBManProcClick(Sender: TObject);
- begin
- MManProc.Click;
- end;
- procedure TMainForm.TBConsoleClick(Sender: TObject);
- begin
- MConsole.Click;
- end;
- procedure TMainForm.TBSendMsgClick(Sender: TObject);
- begin
- MSendMsg.Click;
- end;
- procedure TMainForm.TBHelpClick(Sender: TObject);
- begin
- MHelp.Click;
- end;
- procedure TMainForm.PMMonClick(Sender: TObject);
- begin
- TSPanelShow.Show;
- end;
- procedure TMainForm.PMManProcClick(Sender: TObject);
- begin
- MManProc.Click;
- end;
- procedure TMainForm.PMConsoleClick(Sender: TObject);
- begin
- MConsole.Click;
- end;
- procedure TMainForm.PMSendMsgClick(Sender: TObject);
- begin
- MSendMsg.Click;
- end;
- procedure TMainForm.PMLogoutClick(Sender: TObject);
- begin
- MLogout.Click;
- end;
- procedure TMainForm.PMShutdownOsClick(Sender: TObject);
- begin
- MShutdownOs.Click;
- end;
- procedure TMainForm.PMRebootOsClick(Sender: TObject);
- begin
- MRebootOs.Click;
- end;
- procedure TMainForm.TreeViewDblClick(Sender: TObject);
- begin
- ExeTreeView();
- end;
- procedure TMainForm.EditScanIntervalKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if(not ValueBetween(EditScanInterval.Text,1,99999)) then
- begin
- EditScanInterval.Text:='1';
- end;
- end;
- procedure TMainForm.EditIntervalKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if(not ValueBetween(EditInterval.Text,10,99999)) then
- begin
- EditInterval.Text:='10';
- end;
- end;
- procedure TMainForm.EditConsoleMaxLineKeyUp(Sender: TObject;
- var Key: Word; Shift: TShiftState);
- begin
- if(not ValueBetween(EditConsoleMaxLine.Text,200,300)) then
- begin
- EditConsoleMaxLine.Text:='200';
- end;
- end;
- procedure TMainForm.BtnSaveSettingClick(Sender: TObject);
- begin
- Params.Clear;
- if(CBCpuMonS.Checked) then
- Params.Add('true')
- else
- Params.Add('false');
- if(CBMemMonS.Checked) then
- Params.Add('true')
- else
- Params.Add('false');
- if(CBProcMonS.Checked) then
- Params.Add('true')
- else
- Params.Add('false');
- if(CBFileMonS.Checked) then
- Params.Add('true')
- else
- Params.Add('false');
- if(CBNetMonS.Checked) then
- Params.Add('true')
- else
- Params.Add('false');
- Params.Add(EditScanInterval.Text);
- Params.Add(EditInterval.Text);
- Params.Add(EditConsoleMaxLine.Text);
- if(CBSaveToLogS.Checked) then
- Params.Add('true')
- else
- Params.Add('false');
- SaveConfig(Params);
- UpdateClient(CBClientMC);
- CBClientMC.Items.Strings[0]:='全部';
- CBClientMC.ItemIndex:=0;
- UpdateClient(CBCLientP);
- end;
- procedure TMainForm.BtnAddClientClick(Sender: TObject);
- begin
- if(not IsValidAddr(EditIpAdd.Text)) then
- begin
- ShowMessage('请输入正确的IP地址');
- EditIpAdd.SetFocus;
- exit;
- end;
- if(ExistClient(EditIpAdd.Text)) then
- begin
- ShowMessage('该计算机已经存在!');
- exit;
- end;
- AddClient(EditIpAdd.Text);
- ShowClients(LVUnderMon);
- LoadClientView(VLClient);
- end;
- procedure TMainForm.BtnDeleteClientClick(Sender: TObject);
- begin
- if(LVUnderMon.Selected=nil) then
- begin
- ShowMessage('请选择要永久取消监控的计算机');
- exit;
- end;
- DelClient(LVUnderMon.Selected.SubItems.Strings[0]);
- ShowClients(LVUnderMon);
- LoadClientView(VLClient);
- end;
- procedure TMainForm.CBClientMCChange(Sender: TObject);
- begin
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.CBViewItemChange(Sender: TObject);
- begin
- MonBoard.Items.Clear;
- end;
- procedure TMainForm.BtnMonClick(Sender: TObject);
- var
- StrMsg:TStrings;
- begin
- StrMsg:=TStringList.Create;
- if(BtnMon.Caption='开始监视') then
- begin
- if(CBCpuMon.Checked) then
- StrMsg.Add('50|'+Params[6])
- else
- StrMsg.Add('51');
- if(CBMemMon.Checked) then
- StrMsg.Add('40|'+Params[6])
- else
- StrMsg.Add('41');
- if(CBProcMon.Checked) then
- StrMsg.Add('20')
- else
- StrMsg.Add('21');
- if(CBFileMon.Checked) then
- StrMsg.Add('30')
- else
- StrMsg.Add('31');
- if(CBNetMon.Checked) then
- StrMsg.Add('80')
- else
- StrMsg.Add('81');
- BroadMessage(StrMsg);
- BtnMon.Caption:='停止监视';
- end
- else
- begin
- StrMsg.Add('4');
- BroadMessage(StrMsg);
- BtnMon.Caption:='开始监视';
- end;
- end;
- procedure TMainForm.BtnRefreshClick(Sender: TObject);
- begin
- if(BtnRefresh.Caption='停止刷新') then
- begin
- BtnRefresh.Caption:='自动刷新';
- end
- else
- begin
- BtnRefresh.Caption:='停止刷新';
- end;
- end;
- procedure TMainForm.BtnViewLogClick(Sender: TObject);
- var
- ShowForm:TShowLogForm;
- begin
- ShowForm:=TShowLogForm.Create(Self);
- ShowForm.ShowModal;
- end;
- procedure TMainForm.CBPeriodMonClick(Sender: TObject);
- var
- SecondsTotal:Cardinal;
- begin
- DTEndMon.Date:=NOW;
- if(CBPeriodMon.Checked) then
- begin
- if(Time>DTEndMon.DateTime) then
- begin
- SecondsTotal:=SecondsBetween(NOW,Date+StrToDateTime('23:59:59'));
- SecondsTotal:=SecondsTotal+
- SecondsBetween(Date+StrToDateTime('00:00:00'),DTEndMon.Time);
- end
- else
- begin
- SecondsTotal:=SecondsBetween(NOW,DTEndMon.Time);
- end;
- MonTimer.Interval:=SecondsTotal;
- MonTimer.Enabled:=true;
- end
- else
- begin
- MonTimer.Enabled:=false;
- end;
- end;
- procedure TMainForm.CBClientPChange(Sender: TObject);
- begin
- BtnViewProc.Click;
- end;
- procedure TMainForm.BtnViewProcClick(Sender: TObject);
- var
- StrCmd:TStrings;
- begin
- LVProc.Items.Clear;
- if(CBClientP.Text='请选择计算机') then
- begin
- ShowMessage('请选择你要查看进程的计算机!');
- exit;
- end;
- StrCmd:=TStringList.Create;
- StrCmd.Add('22');
- SendCommand(StrCmd,CBClientP.Text);
- end;
- procedure TMainForm.BtnTerminateProcClick(Sender: TObject);
- var
- StrCmd:TStrings;
- begin
- if(LVProc.Selected=nil) then
- begin
- ShowMessage('请选择你要关闭的进程!');
- exit;
- end;
- StrCmd:=TStringList.Create;
- StrCmd.Add('23|'+LVProc.Selected.SubItems.Strings[1]);
- SendCommand(StrCmd,CBClientP.Text);
- end;
- procedure TMainForm.CBClientCChange(Sender: TObject);
- begin
- BtnConsoleConn.Click;
- end;
- procedure TMainForm.MemoConsoleKeyUp(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- var
- StrCmd:TStrings;
- begin
- if(Key=VK_RETURN) then
- begin
- if(CBClientC.Text='请选择计算机') then
- begin
- ShowMessage('请先选择你要执行远程命令的计算机!');
- exit;
- end;
- MemoConsoleShow.Lines.Add(' ');
- MemoConsoleShow.Lines.Add(MemoConsole.Lines.Text);
- MemoConsoleShow.Lines.Add(' ');
- StrCmd:=TStringList.Create;
- StrCmd.Add('a0|'+Trim(MemoConsole.Lines.Text));
- SendCommand(StrCmd,CBClientC.Text);
- MemoConsole.Clear;
- end;
- end;
- procedure TMainForm.TSSysSettingShow(Sender: TObject);
- var
- Params:TStrings;
- begin
- Params:=TStringList.Create;
- Params.AddStrings(LoadConfig);
- CBCpuMonS.Checked:=StrToBool(Params.Strings[0]);
- CBMemMonS.Checked:=StrToBool(Params.Strings[1]);
- CBProcMonS.Checked:=StrToBool(Params.Strings[2]);
- CBFileMonS.Checked:=StrToBool(Params.Strings[3]);
- CBNetMonS.Checked:=StrToBool(Params.Strings[4]);
- EditScanInterval.Text:=Params.Strings[5];
- EditInterval.Text:=Params.Strings[6];
- EditConsoleMaxLine.Text:=Params.Strings[7];
- CBSaveToLogS.Checked:=StrToBool(Params.Strings[8]);
- end;
- procedure TMainForm.TSSysSettingHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSManClientShow(Sender: TObject);
- begin
- ShowClients(LVUnderMon);
- end;
- procedure TMainForm.TSManClientHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSPanelShowShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSPanelShowHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSFileShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSFileHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSProcShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSProcHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSClientShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSClientHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSSCreenShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSSCreenHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSConsoleShow(Sender: TObject);
- begin
- ;
- end;
- procedure TMainForm.TSConsoleHide(Sender: TObject);
- begin
- ;
- end;
- procedure TMAinForm.ExeTreeView();
- var
- StrSel:String;
- begin
- StrSel:=TreeView.Selected.Text;
- if(StrSel='系统设置') then
- MSysSetting.Click
- else if(StrSel='后台监控') then
- MMonHide.Click
- else if(StrSel='退出监控') then
- Mexit.Click
- else if(StrSel='管理计算机') then
- MManClient.Click
- else if(StrSel='查看计算机连接情况') then
- MViewClient.Click
- else if(StrSel='远程监视') then
- PMMon.Click
- else if(StrSel='CPU使用') then
- MMonCpu.Click
- else if(StrSel='内存使用') then
- MMonMem.Click
- else if(StrSel='进程创建、终止') then
- MMonProc.Click
- else if(StrSel='文件操作') then
- MMonFile.Click
- else if(StrSel='网络数据包') then
- MMonNet.Click
- else if(StrSel='进程管理') then
- MManProc.Click
- else if(StrSel='注销登陆') then
- MLogout.Click
- else if(StrSel='关闭计算机') then
- MShutdownOs.Click
- else if(StrSel='重启计算机') then
- MRebootOs.Click
- else if(StrSel='控制台命令') then
- MConsole.Click
- else if(StrSel='发送消息') then
- MSendMsg.Click
- else
- ;
- end;
- procedure TMainForm.BroadMessage(StrMsg:TStrings);
- const
- MAX_TRY_COUNT=5;
- var
- Count:Integer;
- TryCount:Integer;
- MsgCount:Integer;
- begin
- ScanThread.Suspend;
- Count:=VLClient.Strings.Count-1;
- while(Count>0) do
- begin
- for TryCount:=MAX_TRY_COUNT downto 0 do
- begin
- if(VLClient.Cells[1,Count]='是') then
- begin
- TCPSender.Host:=VLClient.Cells[0,Count];
- try
- TCPSender.Connect();
- if(TCPSender.Connected=true) then
- begin
- for MsgCount:=0 to StrMsg.Count do
- begin
- TCPSender.WriteLn(StrMsg[MsgCount]+#10#10);
- end;
- break;
- end;
- except
- ;
- end;
- TCPSender.Disconnect;
- end;
- end;
- Count:=Count-1;
- end;
- ScanThread.Resume;
- end;
- procedure TMainForm.SendCommand(StrCmd:TStrings;Addr:String);
- const
- MAX_TRY_COUNT=5;
- var
- Count:Integer;
- TryCount:Integer;
- begin
- ScanThread.Suspend;
- TCPSender.Disconnect;
- TCPSender.Host:=Addr;
- for Count:=0 to StrCmd.Count-1 do
- begin
- try
- for TryCount:=MAX_TRY_COUNT downto 0 do
- begin
- if(TCPSender.Connected=true) then
- begin
- TCPSender.WriteLn(StrCmd[Count]+#10#10);
- break;
- end
- else
- begin
- TCPSender.Connect();
- end;
- end;
- except
- ;
- end;
- end;
- ScanThread.Resume;
- end;
- procedure TMainForm.TCPReceiverConnect(AThread: TIdPeerThread);
- var
- StrCmd:TStrings;
- TmpAddr:String;
- begin
- TmpAddr:=AThread.Connection.Socket.Binding.PeerIP;
- StatusBar.Panels.Items[2].Text:=TmpAddr+'已经连接';
- UpdateClientStatus(VLClient,TmpAddr,'是');
- StrCmd:=TStringList.Create;
- if(CBCpuMon.Checked) then
- StrCmd.Add('50|'+Params[6]);
- if(CBMemMon.Checked) then
- StrCmd.Add('40|'+Params[6]);
- if(CBProcMon.Checked) then
- StrCmd.Add('20');
- if(CBFileMon.Checked) then
- StrCmd.Add('30');
- if(CBNetMon.Checked) then
- StrCmd.Add('80');
- SendCommand(StrCmd,TmpAddr);
- end;
- procedure TMainForm.TCPReceiverDisconnect(AThread: TIdPeerThread);
- var
- TmpAddr:String;
- begin
- TmpAddr:=AThread.Connection.Socket.Binding.PeerIP;
- StatusBar.Panels.Items[2].Text:=TmpAddr+'断开连接';
- UpdateClientStatus(VLClient,TmpAddr,'否');
- end;
- procedure TMainForm.TCPReceiverExecute(AThread: TIdPeerThread);
- var
- StrReceived,IpAddr:String;
- StrMsg:TStringList;
- begin
- try
- IpAddr:=AThread.Connection.Socket.Binding.PeerIP;
- StrReceived:=AThread.Connection.ReadLn(#10#10);
- StrReceived:=Trim(StrReceived);
- if(CBSaveToLog.Checked) then
- begin
- SaveLog(IpAddr+'|'+StrReceived);//保存日志
- end;
- if(StrReceived[1]='a') then
- begin
- StrReceived[1]:=#13;
- if(MemoConsoleShow.Lines.Count>=StrToInt(Params[7])) then
- MemoConsoleShow.Lines.Delete(0);
- MemoConsoleShow.Lines.Add(StrReceived);
- end
- else
- begin
- StrMsg:=TStringList.Create;
- StrMsg.AddStrings(ExtractStr(StrReceived,'|'));
- UpdateData(IpAddr,StrMsg);
- end;
- finally
- ;
- end;
- end;
- procedure TMainForm.MonTimerTimer(Sender: TObject);
- begin
- BtnMon.Caption:='停止监视';
- BtnMon.Click;
- end;
- constructor TScanThread.Create(TheForm:TMainForm);
- begin
- OwnerForm:=TheForm;
- inherited Create(false);
- end;
- procedure TScanThread.Execute;
- var
- Interval:Integer;
- begin
- while not Terminated do
- begin
- ScanClient();
- Interval:=StrToInt(Params[5]);
- Sleep(Interval*1000);
- end;
- end;
- function TScanThread.IsValidClient(TmpAddr:String):Boolean;
- begin
- MainForm.StatusBar.Panels.Items[1].Text:='扫描'+TmpAddr+'...';
- if(MainForm.TCPSender.Connected=true) then
- begin
- MainForm.TCPSender.Disconnect;
- end;
- MainForm.TCPSender.Host:=TmpAddr;
- try
- MainForm.TCPSender.Connect();
- if(MainForm.TCPSender.Connected=false) then
- begin
- result:=false;
- exit;
- end
- else
- begin
- MainForm.TCPSender.WriteLn('0|'+
- IntToStr(MainForm.TCPReceiver.DefaultPort)+#10#10);
- end;
- except
- MainForm.TCPSender.Disconnect;
- result:=false;
- exit;
- end;
- result:=true;
- end;
- procedure TScanThread.ScanClient();
- var ClientAddr:String;
- N:Integer;
- begin
- N:=MainForm.VLClient.Strings.Count-1;
- while(N>0) do
- begin
- ClientAddr:=MainForm.VLClient.Keys[N];
- if(IsValidClient(ClientAddr)) then
- begin
- MainForm.StatusBar.Panels.Items[1].Text:='与'
- +ClientAddr+'连接成功';
- end
- else
- begin
- MainForm.StatusBar.Panels.Items[1].Text:='与'
- +ClientAddr+'连接失败';
- end;
- N:=N-1;
- end;
- end;
- procedure TMainForm.UpdateData(Addr:String;StrMsg:TStrings);
- var
- StrTmp:String;
- RetId,N,Count:Integer;
- begin
- RetId:=StrToInt('$'+StrMsg[1]);
- if(RetId in MON_ITEM) then
- begin
- if(BtnRefresh.Caption<>'停止刷新') then
- begin
- exit;
- end;
- if(Addr=CBClientMC.Text) or (CBClientMC.Text='全部') then
- begin
- StrTmp:='';
- if(RetId in [$20,$21]) and
- ((CBViewItem.ItemIndex=3) or (CBViewItem.ItemIndex=0)) then
- begin
- if(RetId=$20) then
- StrTmp:=StrTmp+'创建:'
- else
- StrTmp:=StrTmp+'终止:';
- StrTmp:=StrTmp+'进程号-'+StrMsg[2];
- StrTmp:=StrTmp+',进程文件-';
- StrTmp:=StrTmp+StrMsg[3];
- end
- else if(RetId in [$30..$33]) and
- ((CBViewItem.ItemIndex=4) or (CBViewItem.ItemIndex=0)) then
- begin
- case RetId of
- $30:StrTmp:=StrTmp+'新建文件:';
- $31:StrTmp:=StrTmp+'删除文件:';
- $32:StrTmp:=StrTmp+'文件更新:';
- $33:StrTmp:=StrTmp+'文件更名:';
- end;
- if(RetId<>$33) then
- StrTmp:=StrTmp+StrMsg[2]
- else
- StrTmp:=StrTmp+StrMsg[2]+'更名为'+StrMsg[3];
- end
- else if(RetId=$4) and
- ((CBViewItem.ItemIndex=2) or (CBViewItem.ItemIndex=0)) then
- begin
- StrTmp:=StrTmp+'内存使用率:百分之'+StrMsg[2]
- +',可用物理内存'+StrMsg[3]+'兆';
- end
- else if(RetId=$5) and
- ((CBViewItem.ItemIndex=1) or (CBViewItem.ItemIndex=0)) then
- begin
- StrTmp:=StrTmp+'CPU使用率:百分之'+StrMsg[2];
- end
- else if(RetId in [$80,$81]) and
- ((CBViewItem.ItemIndex=5) or (CBViewItem.ItemIndex=0)) then
- begin
- StrTmp:=StrTmp+'网络数据包:';
- if(RetId=$80) then
- StrTmp:=StrTmp+'收'
- else
- StrTmp:=StrTmp+'发';
- StrTmp:=StrTmp+',数目:'+StrMsg[2];
- StrTmp:=StrTmp+',协议:'+StrMsg[3];
- StrTmp:=StrTmp+',远程IP:'+StrMsg[4];
- StrTmp:=StrTmp+',目标端口:'+StrMsg[5];
- StrTmp:=StrTmp+',包大小:'+StrMsg[6];
- end;
- if(StrTmp='') then
- begin
- exit;
- end;
- MonBoard.Items.Add.SubItems.Add('来自:'+Addr+',时间:'
- +StrMsg[0]);
- MonBoard.Items.Add.SubItems.Add(StrTmp);
- Count:=MonBoard.Items.Count-StrToInt(Params[7]);
- if(Count>0) then
- begin
- N:=0;
- while(N<Count) do
- begin
- MonBoard.Items.Delete(N);
- N:=N+1;
- end;
- end;
- end;
- end
- else
- begin
- case RetId of
- $22://进程列表
- begin
- N:=2;
- Count:=StrMsg.Count;
- LVProc.Items.Clear;
- while(N<Count) do
- begin
- with LVProc.Items.Add do
- begin
- try
- SubItems.Add(StrMsg[N+1]);
- SubItems.Add(StrMsg[N]);
- SubItems.Add(StrMsg[N+2]);
- except
- break;
- end;
- end;
- N:=N+3;
- end;
- end;
- $23://关闭进程
- begin
- if(StrMsg[2]='0') then
- ShowMessage('成功关闭进程!')
- else
- ShowMessage('关闭进程失败!');
- BtnViewProc.Click;
- end;
- else
- ;
- end;
- end;
- end;
- procedure TMainForm.BtnConsoleConnClick(Sender: TObject);
- var
- StrCmd:TStrings;
- begin
- if(CBClientC.Text='请选择计算机') then
- begin
- ShowMessage('请选择你要执行远程控制台的计算机!');
- exit;
- end;
- MemoConsoleShow.Lines.Clear;
- MemoConsoleShow.Lines.Add(' ');
- MemoConsoleShow.Lines.Add('SPYHOLE V 2.0 of IVISIONAL');
- MemoConsoleShow.Lines.Add('2004 ');
- MemoConsoleShow.Lines.Add(' ');
- StrCmd:=TStringList.Create;
- StrCmd.Add('a0|');
- SendCommand(StrCmd,CBClientC.Text);
- end;
- procedure TMainForm.TrayMessage(var message:TMessage);
- var
- CurPoint:Tpoint;
- begin
- Inherited;
- if(message.LParam=WM_RBUTTONUP) then
- begin
- GetCursorPos(CurPoint);
- SetForegroundWindow(Self.Handle);
- PopMemuTray.Popup(CurPoint.X,CurPoint.Y);
- end;
- message.Result:=0;
- end;
- procedure TMainForm.PMShowFormClick(Sender: TObject);
- begin
- MainForm.Show;
- Shell_NotifyIcon(NIM_DELETE,@NotifyData);
- end;
- procedure TMainForm.PMAboutClick(Sender: TObject);
- begin
- MAbout.Click;
- end;
- procedure TMainForm.PMExitSysClick(Sender: TObject);
- begin
- MExit.Click;
- end;
- procedure TMainForm.PMHelpClick(Sender: TObject);
- begin
- MHelp.Click;
- end;
- initialization
- hnd:=CreateMutex(nil,True,'SpyHole2.0监控');
- if(GetLastError=ERROR_ALREADY_EXISTS) then
- begin
- Halt;
- end;
- finalization
- if(hnd<>0) then
- CloseHandle(hnd);
- end.