Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-03-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
Lightbulb Listar los servicios instalados en Windows XP

Hola. Pues resulta ser que pongo aqui este pequeño codigo para aquellas personas que lo necesiten. No es mas que mostrar los servicios que tiene Windows XP instalado...

Código Delphi [-]
const
  //
  // Service Types
  //
  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);

uses WinSvc;

//-------------------------------------
// Get a list of services
//
// return TRUE if successful
//
// sMachine:
//   machine name, ie: \\SERVER
//   empty = local machine
//
// dwServiceType
//   SERVICE_WIN32,
//   SERVICE_DRIVER or
//   SERVICE_TYPE_ALL
//
// dwServiceState
//   SERVICE_ACTIVE,
//   SERVICE_INACTIVE or
//   SERVICE_STATE_ALL
//
// slServicesList
//   TStrings variable to storage
//

function ServiceGetList(
  sMachine: string;
  dwServiceType,
  dwServiceState: DWord;
  slServicesList: TStrings)
  : boolean;
const
  //
  // assume that the total number of
  // services is less than 4096.
  // increase if necessary
  cnMaxServices = 4096;

type
  TSvcA = array[0..cnMaxServices]
    of TEnumServiceStatus;
  PSvcA = ^TSvcA;

var
  //
  // temp. use
  j: integer;

  //
  // service control
  // manager handle
  schm: SC_Handle;

  //
  // bytes needed for the
  // next buffer, if any
  nBytesNeeded,

  //
  // number of services
  nServices,

  //
  // pointer to the
  // next unread service entry
  nResumeHandle: DWord;

  //
  // service status array
  ssa: PSvcA;
begin
  Result := false;

  // connect to the service
  // control manager
  schm := OpenSCManager(
    PChar(sMachine),
    nil,
    SC_MANAGER_ALL_ACCESS);

  // if successful...
  if (schm > 0) then
  begin
    nResumeHandle := 0;

    New(ssa);

    EnumServicesStatus(
      schm,
      dwServiceType,
      dwServiceState,
      ssa^[0],
      SizeOf(ssa^),
      nBytesNeeded,
      nServices,
      nResumeHandle);

    //
    // assume that our initial array
    // was large enough to hold all
    // entries. add code to enumerate
    // if necessary.
    //

    for j := 0 to nServices - 1 do
    begin
      slServicesList.
        Add(StrPas(
        ssa^[j].lpDisplayName));
    end;

    Result := true;

    Dispose(ssa);

    // close service control
    // manager handle
    CloseServiceHandle(schm);
  end;
end;
Un ejemplo de uso de la funcion. Debemos insertar un ListBox:
Código Delphi [-]
ServiceGetList('', SERVICE_WIN32, SERVICE_STATE_ALL, ListBox1.Items);
Responder Con Cita
  #2  
Antiguo 01-03-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias por el aporte fide. Aunque tal vez no sea un "truco", propiamente, lo cierto es que creo que este tipo de soluciones tampoco quedan mal entre los trucos del ClubDelphi, por si a alguien le fueran menester. En todo caso también podrá encontrarse ahora en los foros. Muchas gracias.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 01-03-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
okas dec. Gracias por el consejo ese que me das. Es cierto que se puede pensar en publicarlo en la parte de trucos. Pero eso se lo dejo a alguien que se anime a hacerlo.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Servicios de Windows Eklypsex API de Windows 3 31-10-2008 19:30:13
programar servicios en WINDOWS-XP jesusid Servers 3 20-01-2007 02:25:32
Lanzar ventana de servicios de windows hector_etv Varios 16 12-09-2006 15:18:25
Servicios en windows vista seoane Noticias 10 08-06-2006 02:52:35


La franja horaria es GMT +2. Ahora son las 11:00:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi