Lenguaje de programación Borland Delphi
Con la siguiente función obtendremos el estado de un servicio del Sistema Operativo (Iniciado, Detenido, Pausado, Iniciando, Deteniendo). Para ello añadiremos un formulario, dentro de éste colocaremos dos cuadros de texto (TEdit) y un botón (TButton). Un cuadro de texto será para especificar el nombre del servicio a comprobar y el otro para especificar la máquina en la que se comprobará. Puesto que esta función utiliza otra de la API de Windows llamada "OpenService", la cual se haya en la DLL: "advapi32.dll" , en el USES de la unidad colocaremos "WinSvc":
unit UnidadMenuPrincipal;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, WinSvc, StdCtrls;
type
TformMenuPrincipal = class(TForm)
txtServicio: TEdit;
txtPC: TEdit;
bComprobar: TButton;
procedure bComprobarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
formMenuPrincipal: TformMenuPrincipal;
implementation
{$R *.dfm}
// obtiene el estado de un servicio
function estadoServicio(sPC, sServicio : string ) : string;
var
schm, schs : SC_Handle;
ss : TServiceStatus;
dwStat : DWord;
begin
dwStat := 0;
schm := OpenSCManager(PChar(sPC), Nil, SC_MANAGER_CONNECT);
if (schm > 0) then
begin
schs := OpenService(schm, PChar(sServicio), SERVICE_QUERY_STATUS);
if (schs > 0) then
begin
if (QueryServiceStatus(schs, ss)) then
begin
dwStat := ss.dwCurrentState;
end;
CloseServiceHandle(schs);
end;
CloseServiceHandle(schm);
end;
case dwStat of
0 : Result := 'No disponible';
1 : Result := 'Detenido';
2 : Result := 'Iniciando';
3 : Result := 'Deteniendo';
4 : Result := 'Iniciado';
7 : Result := 'Pausado';
else
result := inttostr(dwstat);
end;
end;
procedure TformMenuPrincipal.bComprobarClick(Sender: TObject);
begin
showmessage (estadoServicio(txtPC.Text, txtServicio.Text))
end;
end.
Publicado el: 2005-01-30