Iniciar Windows
delphi
uses WinSvc; function IniciarServicio(Maquina,Servicio : string ) : boolean; var schm, schs : SC_Handle; ss : TServiceStatus; psTemp : PChar; dwChkP : DWord; begin ss.dwCurrentState := -1; schm := OpenSCManager(PChar(Maquina),Nil,SC_MANAGER_CONNECT); if (schm > 0) then begin schs := OpenService(schm,PChar(Servicio),SERVICE_START or SERVICE_QUERY_STATUS); if (schs > 0) then begin psTemp := Nil; if StartService(schs,0,psTemp) then begin if QueryServiceStatus(schs,ss) then begin while (SERVICE_RUNNING <> ss.dwCurrentState) do begin dwChkP := ss.dwCheckPoint; Sleep(ss.dwWaitHint); if not QueryServiceStatus(schs,ss) then begin break; end; if (ss.dwCheckPoint < dwChkP) then begin break; end; end; end; end; CloseServiceHandle(schs); end; CloseServiceHandle(schm); end; Result := SERVICE_RUNNING = ss.dwCurrentState; end;
Detener Servicio
delphi
function DetenerServicio(Maquina,Servicio : string ) : boolean; var schm, schs : SC_Handle; ss : TServiceStatus; dwChkP : DWord; begin schm := OpenSCManager(PChar(Maquina),Nil,SC_MANAGER_CONNECT); if (schm > 0) then begin schs := OpenService(schm,PChar(Servicio),SERVICE_STOP or SERVICE_QUERY_STATUS); if (schs > 0) then begin if (ControlService(schs,SERVICE_CONTROL_STOP,ss)) then begin if (QueryServiceStatus(schs,ss)) then begin while (SERVICE_STOPPED <> ss.dwCurrentState) do begin dwChkP := ss.dwCheckPoint; Sleep(ss.dwWaitHint); if (not QueryServiceStatus(schs,ss)) then begin break; end; if (ss.dwCheckPoint < dwChkP) then begin break; end; end; end; end; CloseServiceHandle(schs); end; CloseServiceHandle(schm); end; Result := SERVICE_STOPPED = ss.dwCurrentState; end;
Probado en XP, aún no lo he probado en Vista y/o Win7, si alguien puede que me lo confirme.
Saludos.