• Delphi获取系统服务描述信息


    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

  • 相关阅读:
    Xamarin Forms 的一个小事故 dotNET界面
    求极限求无限数相加算法
    C# 获取鼠标位置
    入门级XML学习(三)
    DateTime 获取时间
    《人工智能的未来》经典语录
    VS编辑器 高亮消失如何恢复
    C# 获取桌面
    导出EXECL 2003正常 2007 不正常问题
    css 控制div高度自适应浏览器的高度
  • 原文地址:https://www.cnblogs.com/findumars/p/4998879.html
Copyright © 2020-2023  润新知