Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Obtener los servicios instalados en un PC - Delphi
Lenguaje de programación Borland Delphi


Con esta función podremos obtener los servicios instalados en un PC, nos mostrará tanto el nombre interno como el externo del servicio. Para ello necesitaremos un Formulario (TForm) y dentro de éste un Memo (TMemo). En el evento "Create" del formulario coloraremos la llamada a la función que obtiene los servicios instalados y los mostrará en el Memo. La función utilizada se basa en la API de Windows, con lo cual necesitaremos colocar en el USES de la unidad una llamada a "winsvc":

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, winsvc;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

const
  // tipos de servicios
  SERVICE_KERNEL_DRIVER       = $00000001;
  SERVICE_FILE_SYSTEM_DRIVER  = $00000002;
  SERVICE_ADAPTER             = $00000004;
  SERVICE_RECOGNIZER_DRIVER   = $00000008;

  SERVICE_DRIVER              =
    (SERVICE_KERNEL_DRIVER or
     SERVICE_FILE_SYSTEM_DRIVER or
     SERVICE_RECOGNIZER_DRIVER);

  SERVICE_WIN32_OWN_PROCESS   = $00000010;
  SERVICE_WIN32_SHARE_PROCESS = $00000020;
  SERVICE_WIN32               =
    (SERVICE_WIN32_OWN_PROCESS or
     SERVICE_WIN32_SHARE_PROCESS);

  SERVICE_INTERACTIVE_PROCESS = $00000100;

  SERVICE_TYPE_ALL            =
    (SERVICE_WIN32 or
     SERVICE_ADAPTER or
     SERVICE_DRIVER  or
     SERVICE_INTERACTIVE_PROCESS);



{$R *.dfm}


// obtener una lista de los servicios instalados
// Tipo de servicio
//   SERVICE_WIN32,
//   SERVICE_DRIVER or
//   SERVICE_TYPE_ALL

// estado del servicio
//   SERVICE_ACTIVE,
//   SERVICE_INACTIVE or
//   SERVICE_STATE_ALL
function obtenerServicios(sPC : string; dwServiceType, dwServiceState : DWord;
    slServicesList : TStrings) : boolean;
const
  cnMaxServices = 4096;
type
  TSvcA = array[0..cnMaxServices] of TEnumServiceStatus;
  PSvcA = ^TSvcA;                
var
  j : integer;
  schm : SC_Handle;
  nBytesNeeded, nServices, nResumeHandle : DWord;
  ssa : PSvcA;
begin
  Result := false;
  schm := OpenSCManager(PChar(sPC), Nil, SC_MANAGER_ALL_ACCESS);
  if (schm > 0) then
  begin
    nResumeHandle := 0;
    New(ssa);
    EnumServicesStatus(schm, dwServiceType, dwServiceState, ssa^[0], SizeOf(ssa^),
        nBytesNeeded, nServices, nResumeHandle );
    for j := 0 to nServices - 1 do
    begin
      //slServicesList.Add(StrPas(ssa^[j].lpDisplayName));
      slServicesList.Add(StrPas(ssa^[j].lpDisplayName) + '  [' + StrPas(ssa^[j].lpServiceName) + ']');
    end;
    Result := true;
    Dispose(ssa);
    CloseServiceHandle(schm);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  obtenerServicios('', SERVICE_WIN32, SERVICE_STATE_ALL, Memo1.Lines)
end;

end.




Publicado el: 2005-01-30

Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A