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[..]of Char;
begin
  Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ARGUMENT_ARRAY,
                       nil, ErrorCode, , Buffer, SizeOf(Buffer), nil);
  while (Len > )and(Buffer[Len-] in [#..#, '.']) 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 := ;
  Buffer := nil;
  sc := OpenSCManagerW(Computer, nil, SC_MANAGER_CONNECT);
  if sc <>  then
  begin
    os := OpenServiceW(sc, Servicename, SERVICE_QUERY_CONFIG);
    if os <>  then
    begin
      sd := QueryServiceConfig2(os, , nil, , dwNeeded);
      if (not sd) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
      begin
        try
          GetMem(Buffer, dwNeeded);
          result := QueryServiceConfig2(os, , 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(, PWideChar(description), 'Dienstbeschreibung', );
end.
http://www.lsworks.net/article/97.html
Delphi获取系统服务描述信息的更多相关文章
- .NET获取枚举DescriptionAttribute描述信息性能改进的多种方法
		
一. DescriptionAttribute的普通使用方式 1.1 使用示例 DescriptionAttribute特性可以用到很多地方,比较常见的就是枚举,通过获取枚举上定义的描述信息在UI上显 ...
 - C# 读取枚举描述信息实例
		
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using Syste ...
 - 简析Geoserver中获取图层列表以及各图层描述信息的三种方法
		
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层 ...
 - sql 2012中获取表的信息,包含字段的描述
		
1.获取数据库中的表 select name from sysobjects where type='U' 2.获取表字段(此处是Route表) Select name from syscolumns ...
 - dedecms 获取描述信息限制字数
		
对于我刚刚刚开始对于获取到了描述的信息,但是有些字数简直是太多了,显示的样式不好看,所以我就希望限制字数,所以我来告诉你们获取描述信息限制字数的语法吧[field:description functi ...
 - delphi XE  Datasnap  SERVER  在windows 7 下为服务添加描述信息
		
网上对服务添加描述信息的,多数是用注册表的方式,而注册表的方式,我在win7 下测试,不知为什么,总是不行,把执行的CMD以管理员模式开启,还是没加进去. 于是在网上查到下面的代码,保存供叁考,原文博 ...
 - Delphi使用两种不同方法获取系统端口信息--(装载)
		
Delphi使用两种方法获取windows系统的端口,还可测试发送消息,点击获取端口信息后,可依次得到如下信息:DCB结构大小.波特率大小.XON的临界值.XOFF的临界值.字符位数.奇偶检验位.停止 ...
 - delphi 文件操作(信息获取)
		
delphi获取Exe文件版本信息的函数 Type TFileVersionInfo = Record FixedInfo:TVSFixedFileInfo; {版本信息} CompanyName:S ...
 - C++第五十篇 -- 获取串口的描述信息
		
如何知道自己的电脑上有无串口呢? -- 手动 1. 查看电脑,看是否有串口器件(串口是一个九针的D型接口) 2. 在设备管理器上查看 乍一看,还以为是有两个串口,其实仔细看描述就知道,这是蓝牙虚拟串口 ...
 
随机推荐
- 从Qt4到Qt5的,主要的进化有三(对于QtWidget的精简和优化会很有限)
			
从Qt4到Qt5的,主要的进化有三:1 语言的进化,原来是基于C++(qtwidget)和XML(.ui),现在添加了QML(QtQuick)+JS(v8)的架构.2 绘图系统的进化,原先基于QPai ...
 - RegexOptions枚举
			
在创建Regex类的实例时,构造函数的重载中有一个要求传入RegexOptions的一个枚举值,我相信这个枚举一定非常有用,否则不会要求在构造函数中传入.今天就来看一看这个枚举的作用. 我们干脆把代码 ...
 - awk 处理
			
find . -type f | awk '{print $NF}' | grep pdf$ |grep -v preview | while read A; do ls -ltr $A| awk ' ...
 - 【转】Android 平台下使用 i2c-tools
			
原文网址:http://my.oschina.net/luoly/blog/368881 Android 平台下使用 i2c-tools Andorid 开发板为 Freescale imx6 的 S ...
 - Add and Search Word - Data structure design 解答
			
Question Design a data structure that supports the following two operations: void addWord(word) bool ...
 - XMPP通讯开发-仿QQ显示好友列表和用户组
			
在 XMPP通讯开发-服务器好友获取以及监听状态变化 中我们获取服务器上的用户好友信息,然后结合XMPP通讯开发-好友获取界面设计 我们将两个合并起来,首先获取用户组,然后把用户组用List ...
 - Struts2 学习笔记 10 Result部分 part1
			
1.关于Result我们首先来学习一下结果类型 result type. 先来看struts.xml. struts.xml <?xml version="1.0" enco ...
 - Unity 使用实体类
			
故事的由来: 正在开发打飞机的游戏,遇到这样的数据结构,游戏有很多关卡-> 每个关卡有几波怪物->每一波里面有怪物和数量 [] 关卡 { []波{ {怪物,数量},{怪物,数量},{怪物, ...
 - Redis 命令参考
			
Redis 命令参考 http://redis.readthedocs.org/en/latest/index.html
 - 多线程:pthread_exit,pthread_join,pthread_self
			
/*exit_join_id.c*/ #include<pthread.h> #include<stdio.h> void* eji(void* agr) { printf(& ...