Ver Mensaje Individual
  #10  
Antiguo 11-04-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

La siguiente función, que habrá de revisarse todo lo que se quiera, basada en una homónima que se encuentra en la unidad "JclSrvCtrl.pas" (que para mí que lo contiene todo en cuanto a Servicios de Windows se refiere y su control desde Delphi), digo, que, la siguiente función retorna en la variable que se pasa como parámetro una lista con todos los nombres de los Servicios del sistema:

Código Delphi [-]
uses
  WinSvc;

procedure EnumServices(services: TStringList);
var
  I: Integer;
  Ret: BOOL;
  PBuf: Pointer;
  mn, db: Pchar;
  hSCManager: SC_HANDLE;
  PEss: PEnumServiceStatus;
  BytesNeeded, ServicesReturned, ResumeHandle: DWORD;
begin
  mn := nil;
  db := nil;
  services.Clear;
  // Enum the services
  hSCManager := OpenSCManager(mn, db, SC_MANAGER_ENUMERATE_SERVICE);
  if (hSCManager <> 0) then
  begin
    ResumeHandle := 0; // Must set this value to zero !!!
    try
      PBuf := nil;
      BytesNeeded := 40960;
      repeat
        ReallocMem(PBuf, BytesNeeded);
        Ret := EnumServicesStatus(hSCManager, SERVICE_TYPE_ALL, SERVICE_STATE_ALL,
                PEnumServiceStatus(PBuf)^, BytesNeeded, BytesNeeded,
                 ServicesReturned, ResumeHandle);
      until Ret or (GetLastError <> ERROR_MORE_DATA);
      PEss := PBuf;
      for I := 0 to ServicesReturned-1 do
      begin
        services.Add(PEss^.lpServiceName);
        Inc(PEss);
      end;
    finally
      FreeMem(PBuf);
    end;
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita