home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kompon / d2345 / MSYSINFO.ZIP / Demos / PL.pas < prev    next >
Pascal/Delphi Source File  |  2001-06-26  |  4KB  |  134 lines

  1. unit PL;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls, ComCtrls, ExtCtrls;
  8.  
  9. type
  10.   TfrmPerfLib = class(TForm)
  11.     Panel1: TPanel;
  12.     Panel2: TPanel;
  13.     Splitter1: TSplitter;
  14.     Tree: TTreeView;
  15.     Box: TListBox;
  16.     sb: TStatusBar;
  17.     Panel4: TPanel;
  18.     Panel6: TPanel;
  19.     Timer: TTimer;
  20.     procedure TreeChange(Sender: TObject; Node: TTreeNode);
  21.     procedure TreeDblClick(Sender: TObject);
  22.     procedure TimerTimer(Sender: TObject);
  23.   private
  24.     PerfLib: TObject;
  25.   public
  26.     procedure Refresh;
  27.   end;
  28.  
  29. var
  30.   frmPerfLib: TfrmPerfLib;
  31.  
  32. implementation
  33.  
  34. uses MiTeC_Routines, MiTeC_PerfLib9x, MiTeC_PerfLibNT, CP;
  35.  
  36. {$R *.DFM}
  37.  
  38. { TfrmPerfLib }
  39.  
  40. procedure TfrmPerfLib.Refresh;
  41. var
  42.   szObj, szCtr: string;
  43.   i,j,k: integer;
  44.   Child, Root: TTreeNode;
  45. begin
  46.   Screen.Cursor:=crHourGlass;
  47.   if IsNT then begin
  48.     PerfLib:=TPerfLibNT.Create;
  49.     with TPerfLibNT(PerfLib) do begin
  50.       Refresh;
  51.       sb.Panels[0].Text:=Format('Performance Library %d.%d',[Version, Revision]);
  52.       for i:=0 to ObjectCount-1 do begin
  53.         Root:=Tree.Items.Add(nil,Objects[i].Name);
  54.         for j:=0 to Objects[i].CounterCount-1 do
  55.           Child:=Tree.Items.AddChild(Root,Objects[i].Counters[j].Name);
  56.       end;
  57.     end;
  58.   end else
  59.     if IsOSR2 or Is98 or IsME then begin
  60.       PerfLib:=TPerfLib9x.Create;
  61.       with TPerfLib9x(PerfLib) do begin
  62.         Open;
  63.         for i:=Names.Count-1 downto 0 do begin
  64.           k:=Pos('\',Names[i]);
  65.           if k>0 then begin
  66.             szObj:=Copy(Names[i],1,k-1);
  67.             szCtr:=Copy(Names[i],k+1,255);
  68.           end;
  69.           Root:=Tree.Items.GetFirstNode;
  70.           while Assigned(Root) do
  71.             if Root.Text=szObj then
  72.               Break
  73.             else
  74.               Root:=Root.GetNextSibling;
  75.           if not Assigned(Root) then
  76.             Root:=Tree.Items.Add(nil,szObj);
  77.           if szCtr<>'' then
  78.             Child:=Tree.Items.AddChild(Root,szCtr);
  79.         end;
  80.       end;
  81.     end;
  82.   Screen.Cursor:=crDefault;
  83. end;
  84.  
  85. procedure TfrmPerfLib.TreeChange(Sender: TObject; Node: TTreeNode);
  86. var
  87.   i,oi,ci: integer;
  88.   s: string;
  89. begin
  90.   if Assigned(Node) then begin
  91.     Box.Items.Clear;
  92.     if IsNT then begin
  93.       TPerfLibNT(PerfLib).TakeSnapShot;
  94.       if Assigned(Node.Parent) then
  95.         oi:=TPerfLibNT(PerfLib).GetIndexByName(Node.Parent.Text)
  96.       else
  97.         oi:=TPerfLibNT(PerfLib).GetIndexByName(Node.Text);
  98.       if Assigned(Node.Parent) then
  99.         s:=TPerfLibNT(PerfLib).Objects[oi].Counters[ci].DataStrEx[0]
  100.       else
  101.         s:='';
  102.       if TPerfLibNT(PerfLib).Objects[oi].InstanceCount>0 then begin
  103.         for i:=0 to TPerfLibNT(PerfLib).Objects[oi].InstanceCount-1 do begin
  104.           s:=TPerfLibNT(PerfLib).Objects[oi].Instances[i].Name;
  105.           if Assigned(Node.Parent) then begin
  106.             ci:=TPerfLibNT(PerfLib).Objects[oi].GetCntrIndexByName(Node.Text);
  107.             s:=s+' = '+TPerfLibNT(PerfLib).Objects[oi].Counters[ci].DataStrEx[i];
  108.           end;
  109.           Box.Items.Add(s);
  110.         end;
  111.       end else
  112.         Box.Items.Add(s);
  113.     end else begin
  114.       if Assigned(Node.Parent) then
  115.         Box.Items.Add(Format('%d',[TPerfLib9x(PerfLib).SysData[Node.Parent.Text+'\'+Node.Text]]));
  116.     end;
  117.   end;
  118. end;
  119.  
  120. procedure TfrmPerfLib.TreeDblClick(Sender: TObject);
  121. begin
  122.   if Assigned(Tree.Selected.Parent) then
  123.     ShowPropsDlg(PerfLib,VarArrayOf([Tree.Selected.Text,Tree.Selected.Parent.Text]))
  124.   else
  125.     ShowPropsDlg(PerfLib,Tree.Selected.Text);
  126. end;
  127.  
  128. procedure TfrmPerfLib.TimerTimer(Sender: TObject);
  129. begin
  130.   TreeChange(Tree,Tree.Selected);
  131. end;
  132.  
  133. end.
  134.