Componentes.Terceros.jcl/official/1.96/examples/windows/ntservice/NtSvcDemoGroups.pas

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.