あるので、Delphiでできるかどうか調べてみた。
Delphi PrismではdotNetFreameworkに標準で用意されたクラスが使えるので
簡単だが、Delphi(Win32)では用意されていないみたいだ。
さらに調べたところ、Jedi Code Library(Jcl)には、サービスを扱うクラス
(TJclSCManager,TJclNTService)が用意されていることを知ったので、
実際に検証してみた。
以下、検証用に作ったサンプル(サービスの列挙と指定したサービスの
停止と起動)です。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
LabeledEdit1: TLabeledEdit;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
uses
JclSvcCtrl
, TypInfo
;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
SvcMgr : TJclSCManager;
i : Integer;
begin
//
SvcMgr := TJclSCManager.Create();
try
SvcMgr.Refresh(true);
ListBox1.Clear;
for i := 0 to SvcMgr.ServiceCount -1 do
begin
ListBox1.Items.Add(SvcMgr.Services[i].ServiceName);
end;
finally
SvcMgr.Free;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
SvcMgr : TJclSCManager;
Svc : TJclNTService;
begin
//
//if True then
SvcMgr := TJclSCManager.Create();
try
SvcMgr.Refresh(true);
if (SvcMgr.FindService(LabeledEdit1.Text,Svc)) Then
begin
if TComponent(Sender).Tag = 1 then
begin
Svc.Start;
end
else
begin
Svc.Stop;
end;
Label1.Caption := GetEnumName(TypeInfo(TJclServiceState),Ord(Svc.ServiceState)) ;
end;
finally
SvcMgr.Free;
end;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
SvcMgr : TJclSCManager;
Svc : TJclNTService;
begin
if ListBox1.ItemIndex >=0 then
begin
LabeledEdit1.Text := ListBox1.Items.Strings[ListBox1.ItemIndex];
SvcMgr := TJclSCManager.Create();
try
SvcMgr.Refresh(true);
if (SvcMgr.FindService(LabeledEdit1.Text,Svc)) Then
begin
Label1.Caption := GetEnumName(TypeInfo(TJclServiceState),Ord(Svc.ServiceState));
end;
finally
SvcMgr.Free;
end;
end;
end;
end.
なお、jclには上記クラスを使用したサンプルプログラムがありますので詳細については
そちらを参照して下さい。
1 件のコメント:
こんにちは、通りすがりのDelphiユーザーです。
JEDIのライブラリは私も愛用しています。
機能がありすぎて使い切れていないですが、何かいいものないかなと探すのも
楽しみですね。
コメントを投稿