⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svcdetails.pas

📁 一个很不错的系统信息控件
💻 PAS
字号:
unit SvcDetails;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, MSI_Processes, ImgList;

type
  Tdlg_SvcDetails = class(TForm)
    Bevel1: TBevel;
    bClose: TButton;
    pc: TPageControl;
    imgIcon: TImage;
    TabSheet1: TTabSheet;
    TabSheet3: TTabSheet;
    GenList: TListView;
    eName: TEdit;
    Dep1Tree: TTreeView;
    Label1: TLabel;
    l: TLabel;
    Label2: TLabel;
    Dep2Tree: TTreeView;
    ImageList1: TImageList;
    procedure GenListAdvancedCustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      Stage: TCustomDrawStage; var DefaultDraw: Boolean);
    procedure GenListAdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure Dep1TreeExpanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
    procedure FormDestroy(Sender: TObject);
    procedure Dep2TreeExpanding(Sender: TObject; Node: TTreeNode;
      var AllowExpansion: Boolean);
  private
    FPL: TMiTeC_ProcessList;
    FSI: TServiceInfo;
    FIndex: DWORD;
    sl: TStringList;
  public
    procedure RefreshData;
  end;

procedure ShowSvcDetails(APL: TMiTeC_ProcessList; AIndex: DWORD);

var
  dlg_SvcDetails: Tdlg_SvcDetails;

implementation

uses MiTeC_CtrlRtns, MiTeC_AdvAPI, MiTeC_Routines;

{$R *.dfm}

procedure ShowSvcDetails;
begin
  with Tdlg_SvcDetails.Create(Application.Mainform) do
    try
      FPL:=APL;
      FIndex:=AIndex;
      FSI:=FPL.Services[FIndex];

      RefreshData;

      ShowModal;

    finally
      Free;
    end;
end;

procedure Tdlg_SvcDetails.GenListAdvancedCustomDrawSubItem(
  Sender: TCustomListView; Item: TListItem; SubItem: Integer;
  State: TCustomDrawState; Stage: TCustomDrawStage;
  var DefaultDraw: Boolean);
begin
  with TListView(Sender) do begin
    Canvas.Font.Style:=[];
    if Item.ImageIndex=-3 then
      Canvas.Font.Style:=[fsBold];
    Canvas.Font.Color:=clBlack;
    if Item.ImageIndex=-4 then
      ListView_DrawCheckBox(Sender,Item,SubItem,State,DefaultDraw,'1')
    else
      Canvas.Brush.Color:=Color;
    if cdsHot in State then
      Canvas.Font.Style:=Canvas.Font.Style+[fsUnderline]
    else
      Canvas.Font.Style:=Canvas.Font.Style-[fsUnderline];
  end;
end;

procedure Tdlg_SvcDetails.GenListAdvancedCustomDrawItem(
  Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
  Stage: TCustomDrawStage; var DefaultDraw: Boolean);
begin
  DefaultDraw:=True;
  with TListView(Sender) do begin
    Canvas.Font.Style:=[];
    if Item.ImageIndex=-3 then
      Canvas.Font.Style:=[fsBold];
    Canvas.Font.Color:=clBlack;
    if cdsHot in State then
      Canvas.Font.Style:=Canvas.Font.Style+[fsUnderline]
    else
      Canvas.Font.Style:=Canvas.Font.Style-[fsUnderline];
    if Item.ImageIndex=-2 then
      ListView_DrawLine(Sender,Item,State,DefaultDraw,clGray);
  end;
end;

procedure Tdlg_SvcDetails.RefreshData;
var
  i: Integer;
  n: TTreeNode;
  s: string;
  VersionInfo: TVersionInfo;
begin
  eName.Text:=FSI.DisplayName;

  GenList.Items.Clear;
  if FileExists(FSI.ImageName) then
    imgIcon.Picture.Icon.Handle:=GetFileIcon(FSI.ImageName);

  GetFileVerInfo(FSI.ImageName,VersionInfo);

  GenList.Items.Clear;
  with GenList.Items.Add do begin
    Caption:='Description';
    SubItems.Add(VersionInfo.Description);
    ImageIndex:=-3;
  end;
  with GenList.Items.Add do begin
    Caption:='Version';
    SubItems.Add(VersionInfo.Version);
  end;
  with GenList.Items.Add do begin
    Caption:='Product Name';
    SubItems.Add(VersionInfo.ProductName);
  end;
  with GenList.Items.Add do begin
    Caption:='Company Name';
    SubItems.Add(VersionInfo.CompanyName);
  end;
  with GenList.Items.Add do begin
    Caption:='';
    ImageIndex:=-2;
  end;

  with GenList.Items.Add do begin
    Caption:='Service Name';
    SubItems.Add(FSI.Name);
    ImageIndex:=-3;
  end;
  with GenList.Items.Add do begin
    Caption:='Image Name';
    SubItems.Add(FSI.ImageName);
  end;
  with GenList.Items.Add do begin
    Caption:='Log On As ';
    SubItems.Add(FSI.ObjectName);
  end;
  with GenList.Items.Add do begin
    Caption:='Load Order Group';
    SubItems.Add(FSI.Group);
  end;
  with GenList.Items.Add do begin
    Caption:='Type';
    SubItems.Add(cSvcType[FSI.Typ]);
  end;
  with GenList.Items.Add do begin
    Caption:='';
    ImageIndex:=-2;
  end;
  with GenList.Items.Add do begin
    Caption:='Status';
    SubItems.Add(cSvcStatus[FSI.Status]);
    ImageIndex:=-3;
  end;
  with GenList.Items.Add do begin
    Caption:='Startup Mode';
    SubItems.Add(cSvcStartup[FSI.Startup]);
  end;
  with GenList.Items.Add do begin
    Caption:='Error Control';
    SubItems.Add(cSvcErrorControl[FSI.ErrCtrl]);
  end;

  Dep1Tree.Items.Clear;
  sl.CommaText:=FSI.DependOnService;
  for i:=0 to sl.Count-1 do begin
    s:=FPL.LookupServiceDisplayName(sl[i]);
    if s<>'' then begin
      n:=Dep1Tree.Items.AddChild(nil,s);
      n.ImageIndex:=0;
      n.HasChildren:=True;
    end;
  end;
  Dep1Tree.AlphaSort;

  Dep2Tree.Items.Clear;
  FPL.FindServiceDependants(FSI.Name,sl);
  for i:=0 to sl.Count-1 do begin
    n:=Dep2Tree.Items.AddChild(nil,FPL.LookupServiceDisplayName(sl[i]));
    n.ImageIndex:=0;
    n.HasChildren:=True;
  end;
  Dep2Tree.AlphaSort;
end;

procedure Tdlg_SvcDetails.FormCreate(Sender: TObject);
begin
  pc.ActivePage:=TabSheet1;
  sl:=TStringList.Create;
end;

procedure Tdlg_SvcDetails.Dep1TreeExpanding(Sender: TObject;
  Node: TTreeNode; var AllowExpansion: Boolean);
var
  idx,i: Integer;
  n: TTreeNode;
  s: string;
begin
  if Node.getFirstChild<>nil then
    Exit;
  idx:=FPL.FindService(Node.Text);
  if idx>-1 then begin
    sl.CommaText:=FPL.Services[idx].DependOnService;
    for i:=0 to sl.Count-1 do begin
      s:=FPL.LookupServiceDisplayName(sl[i]);
      if s<>'' then begin
        n:=TTreeView(Sender).Items.AddChild(Node,s);
        n.ImageIndex:=0;
        n.HasChildren:=True;
      end;
    end;
    Node.AlphaSort;
  end;
  Node.HasChildren:=(Node.getFirstChild<>nil);
end;

procedure Tdlg_SvcDetails.FormDestroy(Sender: TObject);
begin
  sl.Free;
end;

procedure Tdlg_SvcDetails.Dep2TreeExpanding(Sender: TObject;
  Node: TTreeNode; var AllowExpansion: Boolean);
var
  idx,i: Integer;
  n: TTreeNode;
begin
  if Node.getFirstChild<>nil then
    Exit;
  idx:=FPL.FindService(Node.Text);
  if idx>-1 then begin
    FPL.FindServiceDependants(FPL.Services[idx].Name,sl);
    for i:=0 to sl.Count-1 do begin
      n:=TTreeView(Sender).Items.AddChild(Node,FPL.LookupServiceDisplayName(sl[i]));
      n.ImageIndex:=0;
      n.HasChildren:=True;
    end;
    Node.AlphaSort;
  end;
  Node.HasChildren:=(Node.getFirstChild<>nil);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -