// Es wird geprüft, ob ein Dienst gestartet ist. Dabei wird der Displayname
// angegeben, welcher in der Computerverwaltung unter Dienste steht. Im
// Beispiel "Designs" und nicht etwa der Servicename "Themes".


// Getestet mit D4 unter XP

uses WinSvc; 
 
function DienstGestartet(Dienst: string): Byte; 
var 
  status: _SERVICE_STATUS; 
  mngr, srvc: THandle; 
  dw: Cardinal; 
  p: PChar; 
begin 
  mngr := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS); 
  if mngr = 0 then begin 
    Result := 1; 
    exit; 
  end; 
  dw := 1024; 
  getmem(p, dw); 
  if not GetServiceKeyName(mngr, PChar(Dienst), p, dw) 
    then Result := 2 
  else begin 
    srvc := OpenService(mngr, p, SERVICE_ALL_ACCESS); 
    if srvc = 0 then Result := 3 
    else begin 
      if not QueryServiceStatus(srvc, status) 
        then begin 
        Result := 4; 
        CloseServiceHandle(srvc); 
      end else begin 
        if status.dwCurrentState <> SERVICE_RUNNING then Result := 5 
        else Result := 0; 
        CloseServiceHandle(srvc); 
      end; 
    end; 
  end; 
  CloseServiceHandle(mngr); 
  freemem(p); 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
var s: string; 
begin 
  case DienstGestartet('Designs') of 
    0: s := 'Dienst ist gestartet'; 
    1: s := 'Servicemanager nicht erreicht'; 
    2: s := 'Servicename nicht gefunden'; 
    3: s := 'Service nicht gefunden'; 
    4: s := 'Status konnte nicht ermittelt werden'; 
  else s := 'Dienst ist nicht gestartet'; 
  end; 
  showmessage(s); 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke