77 lines
1.8 KiB
ObjectPascal
77 lines
1.8 KiB
ObjectPascal
unit NtSvcDemoGroups;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
ComCtrls, StdCtrls, Buttons, JclSvcCtrl;
|
|
|
|
type
|
|
TfrmServiceGroups = class(TForm)
|
|
treeServices: TTreeView;
|
|
btnOK: TBitBtn;
|
|
procedure treeServicesDblClick(Sender: TObject);
|
|
private
|
|
m_SelectedSvc: TJclNtService;
|
|
|
|
procedure ShowGroups(const NtSvc: TJclNtService);
|
|
public
|
|
class function Execute(const NtSvc: TJclNtService): TJclNtService;
|
|
end;
|
|
|
|
implementation
|
|
|
|
{$R *.DFM}
|
|
|
|
{ TfrmServiceGroups }
|
|
|
|
class function TfrmServiceGroups.Execute(const NtSvc: TJclNtService): TJclNtService;
|
|
begin
|
|
with TfrmServiceGroups.Create(nil) do
|
|
try
|
|
ShowGroups(NtSvc);
|
|
|
|
m_SelectedSvc := nil;
|
|
ShowModal;
|
|
Result := m_SelectedSvc;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmServiceGroups.ShowGroups(const NtSvc: TJclNtService);
|
|
var
|
|
GrpIdx, SvcIdx: Integer;
|
|
GrpNode, SvcNode: TTreeNode;
|
|
CurGrp: TJclServiceGroup;
|
|
CurNtSvc: TJclNtService;
|
|
begin
|
|
with NtSvc.SCManager do
|
|
for GrpIdx:=0 to GroupCount-1 do
|
|
begin
|
|
CurGrp := Groups[GrpIdx];
|
|
|
|
if CurGrp.Name = '' then Continue;
|
|
|
|
GrpNode := treeServices.Items.AddChildObject(nil, CurGrp.Name, CurGrp);
|
|
for SvcIdx:=0 to CurGrp.ServiceCount-1 do
|
|
begin
|
|
CurNtSvc := CurGrp.Services[SvcIdx];
|
|
SvcNode := treeServices.Items.AddChildObject(GrpNode, CurNtSvc.ServiceName, CurNtSvc);
|
|
if NtSvc = CurNtSvc then
|
|
treeServices.Selected := SvcNode;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmServiceGroups.treeServicesDblClick(Sender: TObject);
|
|
begin
|
|
if Assigned(treeServices.Selected) and (treeServices.Selected.Level = 1) then
|
|
begin
|
|
m_SelectedSvc := TJclNtService(treeServices.Selected.Data);
|
|
Close;
|
|
end;
|
|
end;
|
|
|
|
end.
|