unit servicio;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
ExtCtrls,TLHelp32;
type
Tsv_actualiza = class(TService)
temporizador: TTimer;
procedure temporizadorTimer(Sender: TObject);
procedure ServiceExecute(Sender: TService);
private
public
function GetServiceController: TServiceController; override;
function procesoenEjecucion: Boolean;
end;
var
sv_actualiza: Tsv_actualiza;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
sv_actualiza.Controller(CtrlCode);
end;
function Tsv_actualiza.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure Tsv_actualiza.temporizadorTimer(Sender: TObject);
begin
if not procesoenEjecucion then
WinExec('calc',0);
end;
procedure Tsv_actualiza.ServiceExecute(Sender: TService);
begin
temporizador.Enabled := True;
while not Terminated do
ServiceThread.ProcessRequests(false);
temporizador.Enabled := False;
end;
function Tsv_actualiza.procesoenEjecucion: Boolean;
var
Proceso : TProcessEntry32;
ProcessHandle : THandle;
Sproceso : Boolean;
Nproceso : String;
begin
Result := False;
Proceso.dwSize := SizeOf(TProcessEntry32);
ProcessHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(ProcessHandle, Proceso) then
begin
Nproceso:= String(Proceso.szExeFile);
repeat Sproceso := Process32Next(ProcessHandle, Proceso);
Nproceso:= String(Proceso.szExeFile);
if Nproceso = 'calc.exe' then
Result := True;
until not Sproceso;
end;
CloseHandle(ProcessHandle);
end;
end.