1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ExtCtrls;
type
TServiceTest = class(TService)
procedure ServiceStart(Sender: TService);
procedure ServiceStop(Sender: TService; var Stopped: Boolean);
private
{ Déclarations privées }
public
function GetServiceController: TServiceController; override;
{ Déclarations publiques }
end;
var
ServiceTest: TServiceTest;
implementation
{$R *.DFM}
procedure KillProgram(ClassName: PChar; Titre: PChar);
const
PROCESS_TERMINATE = $0001;
var
ProcessHandle : THandle;
ProcessID: Integer;
Appli : HWND;
begin
Appli := FindWindow(PChar(ClassName), PChar(Titre));
GetWindowThreadProcessID(Appli, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle,4);
end;
procedure TServiceTest.ServiceStart(Sender: TService);
begin
MessageBox(0, 'Start', PChar(ServiceTest.DisplayName), MB_OK);
WinExec('calc.exe', SW_SHOWNORMAL);
while not Terminated do
ServiceThread.ProcessRequests(True);
end;
procedure TServiceTest.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
KillProgram(nil,'Calculatrice');
MessageBox(0, 'Stop', PChar(serviceTest.DisplayName), MB_OK);
Stopped := True;
end;
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
ServiceTest.Controller(CtrlCode);
end;
function TServiceTest.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
end. |
Partager