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_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;
function ServiceGetList(
sMachine: 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(sMachine),
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));
end;
Result := true;
Dispose(ssa);
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);