本文整理自网络,侵删。
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 xe6 使用intent启动活动并在android应用程序中获取返回值的示例
Delphi 通过twebbrowser文档中的id查找html元素
更多相关阅读请进入《Delphi》频道 >>