delphi 获取系统服务列表


本文整理自网络,侵删。

 
procedure TDpModel.ServiceNames(Names: TStrings; DisplayNames: TStrings = nil;  const Service_Type: integer = $30; const Computer: PChar = nil);{  返回系统服务列表,Names:用于接收返回的服务名称列表,  DisplayName:用于接收返回的对应显示名称列表,  uType:需要返回那些类型服务名称列表,可以为SERVICE_DRIVER,SERVICE_WIN32,SERVICE_ALL}type  TEnumServices = array[0..0] of TEnumServiceStatus;  //windows API结构体  PEnumServices = ^TEnumServices;  //声明类指针var  SCM: SC_Handle;  Services: PEnumServices; //定义结构体  Len: Cardinal; //无符号32位整数 ,取值0到4294967295范围。  ServiceCount, ResumeHandle, i: Cardinal;begin  ResumeHandle := 0;  //建立了一个连接到服务控制管理器的句柄,并打开指定的数据库。  SCM := OpenSCManager(Computer, nil, SC_MANAGER_ALL_ACCESS);  {     Computer:计算机标示指针,如果该指针为NULL ,或者如果它指向一个空字符串,      则连接到本地计算机上的服务控制管理器。     nil:如果该指针为NULL ,默认打开ServicesActive数据库。     SC_MANAGER_ALL_ACCESS:指定访问服务的权限。  }  Len := 0;  ServiceCount := 0;  Services := nil;  try    Names.BeginUpdate;    //判断DisplayNames是否为空    if Assigned(DisplayNames) then DisplayNames.BeginUpdate;    if SCM <> 0 then    begin      //枚举当前系统服务,详见MSDN      EnumServicesStatus(SCM, SERVICE_DRIVER or SERVICE_WIN32, SERVICE_STATE_ALL,        Services[0], 0, Len, ServiceCount, ResumeHandle);      GetMem(Services, Len);      EnumServicesStatus(SCM, SERVICE_DRIVER or SERVICE_WIN32, SERVICE_STATE_ALL,        Services[0], Len, Len, ServiceCount, ResumeHandle);      //Tstring赋值      Names.Add(IntToStr(ServiceCount));      //循环遍历服务      for i := 0 to ServiceCount - 1 do      begin        Names.Add(Services[i].lpServiceName);        if Assigned(DisplayNames) then        begin          DisplayNames.Add(Services[i].lpDisplayName);        end;      end;      FreeMem(Services);    end;  finally    Names.EndUpdate;    if Assigned(DisplayNames) then DisplayNames.EndUpdate;    CloseServiceHandle(SCM);  end;end;//该代码片段来自于: http://www.sharejs.com/codes/delphi/5545

相关阅读 >>

Delphi常用日期函数

Delphi tooltip提示窗口单元

Delphi xe5 android在桌面添加快捷方式

Delphi httpencode

Delphi 动态设置屏幕分辨率

Delphi 递归遍历 treeview树节点

Delphi 解决“richedit line insertion error”错误

Delphi整理三(窗体和基本组件)

Delphi try except与try finally不同之处

Delphi 用文件流读取文本文件字符串的方法

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...