あるので、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のライブラリは私も愛用しています。
機能がありすぎて使い切れていないですが、何かいいものないかなと探すのも
楽しみですね。
コメントを投稿