列举Windows服务

TStringList  * ListServices( int  ServiceType)
{
   TStringList 
* list  =   new  TStringList();
   SC_HANDLE schSCManager   
=  OpenSCManager(NULL,NULL, SC_MANAGER_ALL_ACCESS);
   LPBYTE    lpServices;
   DWORD    n,nSize,npSize,nServicesReturned,nResumeHandle,dwServiceType;
    
if  ( schSCManager    >     0   )
    {
        nResumeHandle  
= 0 ;
        npSize   
=     sizeof (ENUM_SERVICE_STATUS_PROCESS);

        dwServiceType   
=  SERVICE_WIN32    |    SERVICE_DRIVER   |
                        SERVICE_KERNEL_DRIVER   
|   SERVICE_FILE_SYSTEM_DRIVER    |
                        SERVICE_WIN32_OWN_PROCESS   
|   SERVICE_WIN32_SHARE_PROCESS;

        lpServices   
=    LPBYTE(LocalAlloc(LPTR,    30720 ));
        
try
        {
            
if   ( ! EnumServicesStatusEx(schSCManager, SC_ENUM_PROCESS_INFO,
                dwServiceType,   SERVICE_STATE_ALL,   lpServices,   
30720 ,
                
& nSize,    & nServicesReturned, & nResumeHandle, NULL))
            {
               
//     P_ShowError( '读取服务状态失败,错误: '+IntToStr(GetLastError));
                 return  list;
           }

        
for ( n  =   0 ;n <  nServicesReturned - 1 ;n ++ )
        {
                
// Show   the   name   of   service
               
//     ListItem   :=   SvcListView.Items.Add;
               
//  ListItem.Caption   :=   (LPENUM_SERVICE_STATUS_PROCESS(lpServices))^.lpServiceName;
               
//     ListItem.SubItems.Add((LPENUM_SERVICE_STATUS_PROCESS(lpServices))^.lpDisplayName);
               
//  ListItem.SubItems.Add(IntToStr((LPENUM_SERVICE_STATUS_PROCESS(lpServices))^.ServiceStatusProcess.dwProcessId));
               
//  ListItem.SubItems.Add(SrvStatus((LPENUM_SERVICE_STATUS_PROCESS(lpServices))^.ServiceStatusProcess.dwCurrentState));
               String ss  =  (LPENUM_SERVICE_STATUS_PROCESS(lpServices)) -> lpServiceName  ;
                String ss2 
=  (LPENUM_SERVICE_STATUS_PROCESS(lpServices)) -> lpDisplayName  ;
               list
-> Add(ss2);
               
if  (ss2  ==   " wwServices " ) {
                    ShowMessage(ss2);
               }
                lpServices 
+=    npSize;
            }
            
return  list;
           }
        __finally

           {
           
//     if  ( lpServices   != NULL)
           
//         LocalFree(int(lpServices));
       }
    }
}


 以上代码需引用winsvc.h文件,为C++Builder2010编写,基本就是两个api,但不知为何所有的服务都列出来的,单单就是我用C++Builder2010写的一个服务程序无法找到??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值