您的位置:首页 > 编程语言 > Delphi

Delphi获取系统服务描述信息

2015-11-26 20:46 543 查看
program Project1;

{$APPTYPE CONSOLE}

uses
Windows,
WinSvc;

type
SERVICE_DESCRIPTION = packed record
lpDescription: PWChar;
end;
PSERVICE_DESCRIPTION = ^SERVICE_DESCRIPTION;

function QueryServiceConfig2(hService: THandle; dwInfoLevel: DWORD; lpBuffer: Pointer; cbBufSize: DWORD; var pcbBytesNeeded: DWORD): LongBool; stdcall; external 'advapi32.dll' name 'QueryServiceConfig2W';

////////////////////////////////////////////////////////////////////////////////
// Procedure : SysErrorMessage
// Comment : Returns last error as formated string

function SysErrorMessage(ErrorCode: Integer): string;
var
Len: Integer;
Buffer: array[0..55]of Char;
begin
Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ARGUMENT_ARRAY,
nil, ErrorCode, 0, Buffer, SizeOf(Buffer), nil);
while (Len > 0)and(Buffer[Len-1] in [#0..#32, '.']) do Dec(Len);
SetString(Result, Buffer, Len);
end;

function GetServiceDesciption(Computer, Servicename: PWChar; var Description: WideString): Boolean;
var
sc: THandle;
os: THandle;
sd: Boolean;
dwNeeded: DWORD;
Buffer: Pointer;
begin
dwNeeded := 0;
Buffer := nil;
sc := OpenSCManagerW(Computer, nil, SC_MANAGER_CONNECT);
if sc <> 0 then
begin
os := OpenServiceW(sc, Servicename, SERVICE_QUERY_CONFIG);
if os <> 0 then
begin
sd := QueryServiceConfig2(os, 1, nil, 0, dwNeeded);
if (not sd) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
begin
try
GetMem(Buffer, dwNeeded);
result := QueryServiceConfig2(os, 1, Buffer, dwNeeded, dwNeeded);
if result then
begin
Description := PSERVICE_DESCRIPTION(Buffer)^.lpDescription;
end;
finally
FreeMem(Buffer, dwNeeded);
end;
end
else
result := False;
end
else
result := False;
end
else
result := False;
end;

var
description : WideString;

begin
if not GetServiceDesciption('PC-201212071904', 'AdobeFlashPlayerUpdateSvc', description) then
begin
Writeln(SysErrorMessage(GetLastError));
Readln;
end
else
MessageBoxW(0, PWideChar(description), 'Dienstbeschreibung', 0);

end.

http://www.lsworks.net/article/97.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: