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

  • 相关阅读:
    Mac上搭建Hadoop环境(3) — Hive下载及安装
    Mac上搭建Hadoop环境(2) — Hadoop下载及安装
    Mac上搭建Hadoop环境(1) — 虚拟机的安装及SSH免密设置
    Mac上ssh localhost免密失败该如何解决
    Java8 Lambda 之 Collection Stream
    Java 集合Collection——初学者参考,高手慎入(未完待续)
    Java注解Annotation(一)
    ubuntu下安装和破解navicat的方法
    java I/O流类概述
    List元素为泛型时的注意事项
  • 原文地址:https://www.cnblogs.com/findumars/p/4998879.html
Copyright © 2011-2022 走看看