WIN API-VFP枚举系统服务

 *--转自:dkfdtf 大侠


#Define STANDARD_RIGHTS_REQUIRED 0x000F0000
#
Define
SC_MANAGER_ENUMERATE_SERVICE 0x0004
#
Define
SERVICE_WIN32 0x00000030
#
Define
SERVICE_STATE_ALL 0x00000003
#
Define
SERVICE_STOPPED 0x00000001
#
Define
SERVICE_START_PENDING 0x00000002
#
Define
SERVICE_STOP_PENDING 0x00000003
#
Define
SERVICE_RUNNING 0x00000004
#
Define
SERVICE_CONTINUE_PENDING 0x00000005
#
Define
SERVICE_PAUSE_PENDING 0x00000006
#
Define
SERVICE_PAUSED 0x00000007
Declare Long OpenSCManager In
WIN32API ;
    String lpMachineName, ;
&& pointer to machine name string
   
String lpDatabaseName, ;
&& pointer to database name string
   
Long dwDesiredAccess
&& type of access
Declare Long EnumServicesStatus In
WIN32API ;
   
Long hSCManager, ;
&& handle to service control manager database
   
Long dwServiceType, ;
&& type of services to enumerate
   
Long dwServiceState, ;
&& state of services to enumerate
   
String @ lpServices, ;
&& pointer to service status buffer
   
Long cbBufSize, ;
&& size of service status buffer
   
Long @ pcbBytesNeeded, ;
&& pointer to variable for bytes needed
   
Long @ lpServicesReturned, ;
&& pointer to variable for number returned
   
Long @ lpResumeHandle
&& pointer to variable for next entry
Declare Long CloseServiceHandle In
WIN32API ;
   
Long hSCObject
&& handle to service or service control manager database
Declare Long GetLastError In
WIN32API
Declare Long VarPtr In msvbvm60.Dll String
Pstr
 

Create Cursor svclist ( svcname C(20), dispname C(40), state C(8) )
 

m.hScm = OpenSCManager( Null, Null, Bitor( STANDARD_RIGHTS_REQUIRED, SC_MANAGER_ENUMERATE_SERVICE ))
If
( 0 == m.hScm )
    Insert Into svclist( svcname, dispname, state ) Values ( 'Error !', 'Open service control manager', Transform
( GetLastError()))
Else
   
m.cSSB = Replicate( Chr
(0), 64*1024 )
    m.iSvcRet = 0
   
If ( 0 == EnumServicesStatus( m.hScm, SERVICE_WIN32, SERVICE_STATE_ALL, @ m.cSSB, Len
( m.cSSB), 0, @ m.iSvcRet, 0 ))
       
Insert Into svclist( svcname, dispname, state ) Values ( 'Error !', 'Enumerates services', Transform
( GetLastError()))
   
Else
   
    *!* typedef struct _ENUM_SERVICE_STATUS { // ess
        *!* LPTSTR lpServiceName;
        *!* LPTSTR lpDisplayName;
        *!* SERVICE_STATUS ServiceStatus;
        *!* } ENUM_SERVICE_STATUS
        *!* typedef struct _SERVICE_STATUS {
        *!* DWORD dwServiceType;
        *!* DWORD dwCurrentState;
        *!* DWORD dwControlsAccepted;
        *!* DWORD dwWin32ExitCode;
        *!* DWORD dwServiceSpecificExitCode;
        *!* DWORD dwCheckPoint;
        *!* DWORD dwWaitHint;
        *!* } SERVICE_STATUS
       
For m.ii = 1 To
m.iSvcRet
            m.cESS =
Substr
( m.cSSB, 1+(m.ii-1)*36, 36 )
            m.iState =
CToBin( Substr
( m.cESS,13,4 ), 'rs' )
           
Insert Into svclist ( svcname, dispname, state ) Values ( GetString( Substr( m.cESS,1,4 ) ), GetString( Substr
( m.cESS,5,4 ) ), ;
               
Icase
( SERVICE_STOPPED == m.iState,'已停止', SERVICE_START_PENDING == m.iState,'启动中', SERVICE_STOP_PENDING == m.iState,;
                '已停止', SERVICE_RUNNING == m.iState,'运行中', SERVICE_CONTINUE_PENDING == m.iState, '继续中', ;
                SERVICE_PAUSE_PENDING == m.iState,'暂停中', SERVICE_PAUSED == m.iState, '已暂停', '未知状态' ))
       
Endfor
    Endif
CloseServiceHandle( m.hScm )
Endif


Goto Top
Browse Name
m.oGrid Nowait
With
m.oGrid
As Grid
    .ReadOnly
= .T.
    .
AllowCellSelection
= .F.
    .
HighlightBackColor = Rgb
(0,64,128)
    .
HighlightForeColor = Rgb
( 255,255,255 )
    .
SetAll
( 'DynamicBackColor', 'IIF(1==RECNO()%2,RGB(255,243,243),RGB(255,255,255))' )
Endwith


Function
GetString( tcPtr )
    Local
cString
   
Try
       
m.cString = Sys( 2600, CToBin
( m.tcPtr, 'rs' ),512 )
   
Catch
       
m.cString=''
   
Endtry
    Return Left
( m.cString, At( Chr
(0), m.cString ) - 1 )
Endfunc
 

### 回答1: arm-linux-gcc-4.5.1-v6-vfp-20120301.rar是一个文件,文件名中包含了一些数字和字母,这些数字和字母表示了一些信息。该文件是arm架构的Linux操作系统下使用的gcc编译器,具体版本为4.5.1,支持armv6指令集和vfp浮点数指令集,发布时间为2012年3月1日。 gcc编译器是一个开放源代码的编译器,它可以生成在不同平台(如arm、x86等)上运行的程序。arm架构是一种广泛使用于移动设备和嵌入式系统中的微处理器架构,armv6是其中一种指令集,vfp是浮点指令集。 该编译器可以用于开发各种arm架构下的应用程序,比如嵌入式系统、智能手机、平板电脑等。它可以将C、C++、Objective-C等高级语言编写的源代码编译成arm架构下的可执行文件。使用该编译器进行开发可以提高程序的稳定性和性能,并节省开发成本和时间。 总之,arm-linux-gcc-4.5.1-v6-vfp-20120301.rar是一个在arm架构下使用的gcc编译器,可以用于开发各种类型的应用程序,具有较高的稳定性和性能。 ### 回答2: arm-linux-gcc-4.5.1-v6-vfp-20120301.rar 是一个Linux操作系统下的ARM架构编译器,其版本号为4.5.1,支持v6和vfp指令集,在2012年3月1日发布。这个编译器可以在Linux环境下编译ARM架构的代码,并支持v6和vfp指令集,可以有效地提高代码的运行效率和性能。常见的应用场景包括嵌入式系统、移动设备以及无线网络等领域。此外,这个编译器还提供了一些工具,例如汇编器、链接器、调试器等,可以帮助开发者进行代码编译、调试以及优化等工作。总之,arm-linux-gcc-4.5.1-v6-vfp-20120301.rar是一个重要的开发工具,对于ARM架构的应用程序开发具有重要意义。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值