zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    centos6 下erlang安装
    待研究
    关键字拦截查询
    获取CNVD的cookie
    adb pull 文件夹到电脑
    Linux中查看端口占用情况
    Running Tensorflow on AMD GPU
    验证码识别相关文章
    conda和pip相关操作
    windows安装pycrypto报错
  • 原文地址:https://www.cnblogs.com/findumars/p/4998879.html
Copyright © 2011-2022 走看看