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

控制台编程

开发平台:

Delphi

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // 2004 (C) Copyrights Reserved
  4. // Author:Aureala
  5. //
  6. ////////////////////////////////////////////////////////////////////////////////
  7. unit UtilTools;
  8. interface
  9. uses
  10.   Windows, Classes, IniFiles, SysUtils, ComCtrls, StdCtrls,
  11.   ValEdit, Dialogs;
  12. const
  13.   ConfigFileName='.monsys.sys';
  14.   function  IsValidAddr(TmpAddr:String):Boolean;
  15.   function  ValueBetween(ValueStr:String;MinValue,MaxValue:Cardinal):Boolean;
  16.   procedure AddClient(Param:String);
  17.   procedure DelClient(Param:String);
  18.   function  ExistClient(Param:String):Boolean;
  19.   procedure ShowClients(ListView:TListView);
  20.   procedure UpdateClient(CBClient:TComboBox);
  21.   procedure LoadClientView(VLEClient:TValueListEditor);
  22.   procedure UpdateClientStatus(VLEClient:TValueListEditor;ClientAddr,Status:String);
  23.   procedure SaveConfig(Values:TStrings);
  24.   function  LoadConfig():TStrings;
  25.   procedure SaveLog(StrInfo:String);
  26.   procedure LoadLog(FileName,Addr:String;ViewItem:Integer;LVValues:TListView);
  27.   function  ExtractStr(const StrOrg,SepChar:String):TStrings;
  28. var
  29.   ConfigFile:TIniFile;
  30. implementation
  31. function  IsValidAddr(TmpAddr:String):Boolean;
  32. var TmpStr:TStringList;
  33.     TmpNum,n:Integer;
  34. begin
  35.   TmpStr:=TStringList.Create;
  36.   TmpStr.Delimiter:='.';
  37.   TmpStr.DelimitedText:=TmpAddr;
  38.   if(TmpStr.Count<>4) then
  39.   begin
  40.     result:=false;
  41.     exit;
  42.   end;
  43.   try
  44.     n:=0;
  45.     while(n<4) do
  46.     begin
  47.       TmpNum:=StrToInt(TmpStr[n]);
  48.       if(TmpNum>255) or (TmpNum<0) then
  49.       begin
  50.         result:=false;
  51.         exit;
  52.       end;
  53.       n:=n+1;
  54.     end;
  55.   except
  56.     on  EConvertError do
  57.     begin
  58.       result:=false;
  59.       exit;
  60.     end;
  61.   end;
  62.   result:=true;
  63. end;
  64. function  ValueBetween(ValueStr:String;MinValue,MaxValue:Cardinal):Boolean;
  65. var
  66.   TmpValue:Cardinal;
  67. begin
  68.   try
  69.   TmpValue:=StrToInt64(ValueStr);
  70.   if((TmpValue<MinValue) or (TmpValue>MaxValue)) then
  71.     result:=false
  72.   else
  73.     result:=true;
  74.   except
  75.     result:=false;
  76.   end;
  77. end;
  78. procedure AddClient(Param:String);
  79. begin
  80.   ConfigFile:=TIniFile.Create(ConfigFileName);
  81.   ConfigFile.WriteString('CLIENT',Param,'');
  82.   ConfigFile.Destroy;
  83. end;
  84. procedure DelClient(Param:String);
  85. begin
  86.   ConfigFile:=TIniFile.Create(ConfigFileName);
  87.   ConfigFile.DeleteKey('CLIENT',Param);
  88.   ConfigFile.Destroy;
  89. end;
  90. function  ExistClient(Param:String):Boolean;
  91. var
  92.   StrParam:TStrings;
  93.   Count:Integer;
  94. begin
  95.   StrParam:=TStringList.Create;
  96.   ConfigFile:=TIniFile.Create(ConfigFileName);
  97.   ConfigFile.ReadSection('CLIENT',StrParam);
  98.   ConfigFile.Destroy;
  99.   Count:=0;
  100.   while(Count<StrParam.Count) do
  101.   begin
  102.     if(StrParam.Strings[Count]=Param) then
  103.     begin
  104.       result:=true;
  105.       exit;
  106.     end;
  107.     Count:=Count+1;
  108.   end;
  109.   result:=false;
  110. end;
  111. procedure ShowClients(ListView:TListView);
  112. var
  113.   StrParam:TStrings;
  114.   Count:Integer;
  115. begin
  116.   StrParam:=TStringList.Create;
  117.   ConfigFile:=TIniFile.Create(ConfigFileName);
  118.   ConfigFile.ReadSection('CLIENT',StrParam);
  119.   ConfigFile.Destroy;
  120.   ListView.Items.Clear;
  121.   Count:=StrParam.Count-1;
  122.   while(Count>=0) do
  123.   begin
  124.     ListView.Items.Add.SubItems.Add(StrParam.Strings[Count]);
  125.     Count:=Count-1;
  126.   end;
  127. end;
  128. procedure UpdateClient(CBClient:TComboBox);
  129. var
  130.   StrParam:TStrings;
  131.   Count:Integer;
  132. begin
  133.   StrParam:=TStringList.Create;
  134.   ConfigFile:=TIniFile.Create(ConfigFileName);
  135.   ConfigFile.ReadSection('CLIENT',StrParam);
  136.   ConfigFile.Destroy;
  137.   CBClient.Clear;
  138.   CBClient.Items.Add('请选择计算机');
  139.   Count:=StrParam.Count-1;
  140.   while(Count>=0) do
  141.   begin
  142.     CBClient.Items.Add(StrParam.Strings[Count]);
  143.     Count:=Count-1;
  144.   end;
  145.   CBClient.ItemIndex:=0;
  146. end;
  147. procedure LoadClientView(VLEClient:TValueListEditor);
  148. var
  149.   StrParam:TStrings;
  150.   Count:Integer;
  151. begin
  152.   StrParam:=TStringList.Create;
  153.   ConfigFile:=TIniFile.Create(ConfigFileName);
  154.   ConfigFile.ReadSection('CLIENT',StrParam);
  155.   ConfigFile.Destroy;
  156.   VLEClient.Strings.Clear;
  157.   VLEClient.Strings.Add('计算机地址=连接');
  158.   Count:=StrParam.Count-1;
  159.   while(Count>=0) do
  160.   begin
  161.     VLEClient.Strings.Add(StrParam.Strings[Count]+'=否');
  162.     Count:=Count-1;
  163.   end;
  164. end;
  165. procedure UpdateClientStatus(VLEClient:TValueListEditor;ClientAddr,Status:String);
  166. var
  167.   Id:Integer;
  168. begin
  169.   try
  170.     Id:=VLEClient.Strings.IndexOfName(ClientAddr);
  171.     if(Id<0) then
  172.     begin
  173.       VLEClient.Strings.Add(ClientAddr+'='+Status);
  174.     end
  175.     else
  176.       VLEClient.Cells[1,Id]:=Status;
  177.   except
  178.     ;
  179.   end;
  180. end;
  181. procedure SaveConfig(Values:TStrings);
  182. begin
  183.   ConfigFile:=TIniFile.Create(ConfigFileName);
  184.   try
  185.     ConfigFile.WriteString('MONSYSTEM','moncpu',Values.Strings[0]);
  186.     ConfigFile.WriteString('MONSYSTEM','monmem',Values.Strings[1]);
  187.     ConfigFile.WriteString('MONSYSTEM','monproc',Values.Strings[2]);
  188.     ConfigFile.WriteString('MONSYSTEM','monfile',Values.Strings[3]);
  189.     ConfigFile.WriteString('MONSYSTEM','monnet',Values.Strings[4]);
  190.     ConfigFile.WriteString('MONSYSTEM','scaninterval',Values.Strings[5]);
  191.     ConfigFile.WriteString('MONSYSTEM','interval',Values.Strings[6]);
  192.     ConfigFile.WriteString('MONSYSTEM','consolemaxline',Values.Strings[7]);
  193.     ConfigFile.WriteString('MONSYSTEM','savelog',Values.Strings[8]);
  194.   except
  195.     ;
  196.   end;
  197.   ConfigFile.Destroy;
  198. end;
  199. function LoadConfig():TStrings;
  200. var
  201.   StrConfig:TStrings;
  202. begin
  203.   StrConfig:=TStringList.Create;
  204.   ConfigFile:=TIniFile.Create(ConfigFileName);
  205.   if(ConfigFile.ReadString('MONSYSTEM','moncpu','false')='false') then
  206.     StrConfig.Add('false')
  207.   else
  208.     StrConfig.Add('true');
  209.   if(ConfigFile.ReadString('MONSYSTEM','monmem','false')='false') then
  210.     StrConfig.Add('false')
  211.   else
  212.     StrConfig.Add('true');
  213.   if(ConfigFile.ReadString('MONSYSTEM','monproc','false')='false') then
  214.     StrConfig.Add('false')
  215.   else
  216.     StrConfig.Add('true');
  217.   if(ConfigFile.ReadString('MONSYSTEM','monfile','false')='false') then
  218.     StrConfig.Add('false')
  219.   else
  220.     StrConfig.Add('true');
  221.   if(ConfigFile.ReadString('MONSYSTEM','monnet','false')='false') then
  222.     StrConfig.Add('false')
  223.   else
  224.     StrConfig.Add('true');
  225.   StrConfig.Add(IntToStr(ConfigFile.ReadInteger('MONSYSTEM','scaninterval',1)));
  226.   StrConfig.Add(IntToStr(ConfigFile.ReadInteger('MONSYSTEM','interval',10)));
  227.   StrConfig.Add(IntToStr(ConfigFile.ReadInteger('MONSYSTEM','consolemaxline',100)));
  228.   if(ConfigFile.ReadString('MONSYSTEM','savelog','false')='false') then
  229.     StrConfig.Add('false')
  230.   else
  231.     StrConfig.Add('true');
  232.   result:=StrConfig;
  233.   ConfigFile.Destroy;
  234. end;
  235. procedure SaveLog(StrInfo:String);
  236. var
  237.   LogFileName:string;
  238.   LogFile:TextFile;
  239.   hFile:Cardinal;
  240. begin
  241.   LogFileName:=FormatDateTime('YYYYMMDDHH',NOW)+'.rec';
  242.   if((not DirectoryExists('.log')) and
  243.     (not CreateDirectory('.log',nil))) then
  244.     exit;
  245.   LogFileName:='.log'+LogFileName;
  246.   if(not FileExists(LogFileName)) then
  247.   begin
  248.     hFile:=CreateFile(PAnsiChar(LogFileName),GENERIC_WRITE+GENERIC_READ,
  249.       FILE_SHARE_READ,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_SYSTEM,0);
  250.     CloseHandle(hFile);
  251.   end;
  252.   AssignFile(LogFile,LogFileName);
  253.   Reset(LogFile);
  254.   try
  255.     Append(LogFile);
  256.     WriteLn(LogFile,StrInfo);
  257.   except
  258.     ;
  259.   end;
  260.   CloseFile(LogFile);
  261. end;
  262. procedure LoadLog(FileName,Addr:String;ViewItem:Integer;LVValues:TListView);
  263. var
  264.   StrData:string;
  265.   LogFile:TextFile;
  266.   StrMsg:TStrings;
  267.   RetId:Integer;
  268. begin
  269.   if(not FileExists(FileName)) then
  270.   begin
  271.     ShowMessage('没有找到文件');
  272.     exit;
  273.   end;
  274.   LVValues.Items.Clear;
  275.   StrMsg:=TStringList.Create;
  276.   AssignFile(LogFile,FileName);
  277.   Reset(LogFile);
  278.   while(not Eof(LogFile)) do
  279.   begin
  280.     ReadLn(LogFile,StrData);
  281.     StrMsg.Clear;
  282.     StrMsg.AddStrings(ExtractStr(StrData,'|'));
  283.     if(StrMsg.Count<4) then
  284.       exit;
  285.     RetId:=StrToInt('$'+StrMsg[2]);
  286.     if(Addr=StrMsg[0]) or (Addr='全部') then
  287.     begin
  288.       if(RetId in [$20,$21]) and
  289.         ((ViewItem=3) or (ViewItem=0)) then
  290.       begin
  291.         with LVValues.Items.Add do
  292.         begin
  293.           Subitems.Add(StrMsg[0]);
  294.           Subitems.Add(StrMSg[1]);
  295.           Subitems.Add('进程创建、终止');
  296.           if(RetId=$20) then
  297.             Subitems.Add('创建')
  298.           else
  299.             Subitems.Add('终止');
  300.           Subitems.Add(StrMsg[3]);
  301.           Subitems.Add(StrMsg[4]);
  302.         end;
  303.       end
  304.       else if(RetId in [$30..$33]) and
  305.         ((ViewItem=4) or (ViewItem=0)) then
  306.       begin
  307.         with LVValues.Items.Add do
  308.         begin
  309.           Subitems.Add(StrMsg[0]);
  310.           Subitems.Add(StrMSg[1]);
  311.           Subitems.Add('文件操作');
  312.           case RetId of
  313.             $30:Subitems.Add('新建文件');
  314.             $31:Subitems.Add('删除文件');
  315.             $32:Subitems.Add('文件更新');
  316.             $33:Subitems.Add('文件更名');
  317.           end;
  318.           if(RetId<>$33) then
  319.             Subitems.Add(StrMsg[3])
  320.           else
  321.           begin
  322.             Subitems.Add(StrMsg[3]);
  323.             Subitems.Add(StrMsg[4]);
  324.           end;
  325.         end;
  326.       end
  327.       else if(RetId=$4) and
  328.         ((ViewItem=2) or (ViewItem=0)) then
  329.       begin
  330.         with LVValues.Items.Add do
  331.         begin
  332.           Subitems.Add(StrMsg[0]);
  333.           Subitems.Add(StrMSg[1]);
  334.           Subitems.Add('内存使用');
  335.           Subitems.Add(StrMsg[3]+'%');
  336.           Subitems.Add(StrMsg[4]+'兆');
  337.         end;
  338.       end
  339.       else if(RetId=$5) and
  340.         ((ViewItem=1) or (ViewItem=0)) then
  341.       begin
  342.         with LVValues.Items.Add do
  343.         begin
  344.           Subitems.Add(StrMsg[0]);
  345.           Subitems.Add(StrMSg[1]);
  346.           Subitems.Add('CPU使用');
  347.           Subitems.Add(StrMsg[3]+'%');
  348.         end;
  349.       end
  350.       else if(RetId in [$80,$81]) and
  351.         ((ViewItem=5) or (ViewItem=0)) then
  352.       begin
  353.         with LVValues.Items.Add do
  354.         begin
  355.           Subitems.Add(StrMsg[0]);
  356.           Subitems.Add(StrMSg[1]);
  357.           Subitems.Add('网络数据包');
  358.           if(RetId=$80) then
  359.             Subitems.Add('收')
  360.           else
  361.             Subitems.Add('发');
  362.           Subitems.Add('数目'+StrMsg[3]);
  363.           Subitems.Add('协议'+StrMsg[4]);
  364.           Subitems.Add('远程IP'+StrMsg[5]);
  365.           Subitems.Add('目标端口'+StrMsg[6]);
  366.         end;
  367.       end;
  368.     end;
  369.   end;
  370.   CloseFile(LogFile);
  371. end;
  372. function  ExtractStr(const StrOrg,SepChar:String):TStrings;
  373. var
  374.   StrData:TStrings;
  375.   i,n,Len:integer;
  376. begin
  377.   i:=1;
  378.   n:=0;
  379.   Len:=Length(StrOrg)+1;
  380.   StrData:=TStringList.Create;
  381.   StrData.Text:='';
  382.   while(i<Len) do
  383.   begin
  384.     StrData.Add('');
  385.     while(StrOrg[i]<>SepChar) and (i<Len) do
  386.     begin
  387.       StrData.Strings[n]:=StrData.Strings[n]+StrOrg[i];
  388.       i:=i+1;
  389.     end;
  390.     i:=i+1;
  391.     n:=n+1;
  392.   end;
  393.   result:=StrData;
  394. end;
  395. end.