// 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;
|