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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls;
type
TService1 = class(TService)
Timer1: TTimer;
Timer2: TTimer;
procedure ServiceExecute(Sender: TService);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
FdisplayName: string;
procedure SetdisplayName(const Value: string);
{ Private declarations }
public
function GetServiceController: TServiceController; override;
property displayName: string read FdisplayName write SetdisplayName;
{ Public declarations }
end;
var
Service1: TService1;
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 ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TService1.ServiceExecute(Sender: TService);
begin
Service1.DisplayName := 'XXXX';
MessageBox(0, 'Start', PChar(Service1.DisplayName), MB_OK);
while not Terminated do
ServiceThread.ProcessRequests(True);// attend l'apel de fermeture par windows
end;
procedure TService1.SetdisplayName(const Value: string);
begin
FdisplayName := Value;
end;
procedure TService1.Timer1Timer(Sender: TObject);
begin
WinExec('calc.exe', SW_SHOWNORMAL);
Timer1.Enabled := false;
Timer2.Enabled := true;
end;
procedure TService1.Timer2Timer(Sender: TObject);
begin
KillProgram(nil,'Calculatrice');
Timer2.Enabled := false;
Timer1.Interval := 5000;
Timer1.Enabled := true;
end;
end. |
Partager