论文无忧网提供:计算机毕业论文范文|计算机毕业设计|计算机毕业论文
栏目导航 ASP Java Web .NET VB6.0 JAVA VC VF DELPHI PB 计算机网络 计算机科学与技术 PHP 安卓APP 其他 C# 代写论文
当前位置: > 计算机 > 计算机科学与技术 >

windows系统辅助管理程序设计与开发(论文+程序)

3.4.2   界面实现

添加一个窗体,并按照下表设置窗体的属性 http://www.paper51.com

表3.4 显示工作站信息窗体设置表

paper51.com

窗体属性

copyright paper51.com

取值 内容来自论文无忧网 www.paper51.com

Name

paper51.com

detail 内容来自www.paper51.com

Caption

http://www.paper51.com

网络工作站及当前用户信息

http://www.paper51.com

该窗体首先添加一个ListBox控件,然后在控件上添加8个label控件,其中6个对应返回的工作站信息分别设置其Caption属性,另一个Label控件设置标题为“函数调用成功(0)或错误次数:“,剩余一个Label控件标题为调用NetWkstaGetInfo()函数出错的次数,无错则返回0,1个commandbotton控件。添加完毕后的窗体如图所示:

http://www.paper51.com

http://www.paper51.com

图3.4 显示工作站信息 内容来自www.paper51.com

用户单击按钮,获取WKSTA_INFO_102结构中的工作站信息,调用函数GetWorkstationUserName()返回指定机器的当前注册用户名,列表框中将显示出工作站的配置信息、用户数目以及登陆用户名。

copyright paper51.com

3.5   列举本机服务 内容来自论文无忧网 www.paper51.com

3.5.1   功能设计 copyright paper51.com

这个窗体主要用来列举本机在指定的服务控制管理器(SCM:Service Control Manager)数据库中的服务,返回每个服务的名称和状态信息。使用API函数EnumServicesStatus枚举指定的SCM数据库中的服务,包括服务的名称和状态(为了成功调用函数EnumServicesStatus,必须先调用函数OpenSCManager打开服务管理数据库。一旦获得了数据库的句柄,就可以调用该函数了),获取的相关信息记录在ENUM_SERVICE_STATUS结构中,并由SERVICE_STATUS结构返回服务的有关信息。程序执行时,首先调用EnumServicesStatus函数获取服务信息,然后判断是否枚举成功,并枚举了所有服务信息,若完成,则调用相关函数将信息返回显示在列表框中。其中主要的函数及结构定义如下: 内容来自论文无忧网 www.paper51.com

(1)函数OpenSCManager

内容来自论文无忧网 www.paper51.com

SC_HANDLE  OpenSCManager(

内容来自论文无忧网 www.paper51.com

   LPCTSTR    lpMachineName,  ‘机器名地址

paper51.com

   LPCTSTR    lpDatabaseName,  ‘数据库名地址

paper51.com

   DWORD   dwDesireAccess,  ‘访问类型,本程序使用SC_MANAGER_ENUMERATE_SERVICE类型,允许调用EnumServicesStatus函数来列举数据库中的服务

内容来自www.paper51.com

);

内容来自论文无忧网 www.paper51.com

(2)函数EnumServicesStatus

内容来自www.paper51.com

BOOL  EnumServiceStatus( http://www.paper51.com

   SC_HANDLE               hSCManager,   http://www.paper51.com

   DWORD                   dwServiceType,

内容来自www.paper51.com

   DWORD                   dwServiceState, 

paper51.com

  LPENUM_SERVICE_STATUS   lpServices,

内容来自论文无忧网 www.paper51.com

   ……

内容来自www.paper51.com

   LPDWORD                 lpServicesReturned, http://www.paper51.com

   LPDWORD                 lpResumeHandle

paper51.com

);

http://www.paper51.com

hSCManager:SCM数据库的句柄。由函数OpenSCManager返回。 copyright paper51.com

dwServiceType:枚举的服务类型,本程序使用SERVICE_WIN32类型,枚举SERVICE_WIN32_OWN_PROCESS和SERVICE_WIN32_SHARE_PROCESS类型的服务 内容来自www.paper51.com

dwServiceState: 程序使用SERVICE_STATE_ALL类型,枚举处于SERVICE_ACTIVE和SERVICE_INACTIVE运行状态的服务

内容来自论文无忧网 www.paper51.com

lpServices:一个ENUM_SERVICE_STATUS结构的数组指针,其中包含了返回的数据库中的每个服务的名称和服务状态的信息 内容来自www.paper51.com

pcbBytesNeeded:指向一个DWORD变量的指针,该变量给出了接收剩余的服务入口所需的缓冲的字节数量

内容来自www.paper51.com

lpResumeHandle:指向一个DWORD变量的指针,该变量是一个输入/输出参数,用于输入时,它指定了枚举开始的入口地址,用于输出时,如果函数调用成功,则该参数的值为0。 paper51.com

如果函数调用成功,则返回非零值;否则返回0。可调用函数GetLastError来获取详细的错误信息。

copyright paper51.com

(3)ENUM_SERVICE_STATUS结构

内容来自www.paper51.com

Typedef  struct_ENUM_SERVICE_STATUS(

paper51.com

   LPTSTR        lpServiceName; ‘指明了SCM数据库中的服务的名称 内容来自www.paper51.com

   …… copyright paper51.com

   SERVICE_STATUS ServiceStatus; ‘指定一个SERVICE_STATUS结构,结构中包含了返回的lpServiceName指定的服务状态信息 paper51.com

)ENUM_SERVICE_STATUS,*LPENUM_SERVICE_STATUS; copyright paper51.com

(4)SERVICE_STATUS结构 内容来自论文无忧网 www.paper51.com

Typedef  struct_SERVICE_STATUS(

paper51.com

   DWORD    dwServiceType;  ‘标明返回的服务类型 http://www.paper51.com

   DWORD    dwCurrentState; ‘指明服务的当前状态 内容来自www.paper51.com

   …… 内容来自论文无忧网 www.paper51.com

)SERVICE_STATUS, *LPSERVICE_STATUS;

内容来自www.paper51.com

窗体中使用函数EnumSystemServices()枚举系统中的用户:

内容来自www.paper51.com

Private functionEnumSystemServices(ct1 as control)as long

内容来自论文无忧网 www.paper51.com

……

copyright paper51.com

If  EnumServicesStatus(hSCManager,SERVICE_WIN32, SERVICE_STATE_ALL, pntr(0), cbBuffSize, cbRequired, dwReturned,hEnumResume) Then 内容来自www.paper51.com

‘从pntr()数组中提取所需的信息

paper51.com

   With List1 copyright paper51.com

       Clear

paper51.com

        Fori = 0 To dwReturned - 1 内容来自www.paper51.com

       sDispName = GetStrFromPtrA(ByVal pntr(i).lpDisplayName)

内容来自www.paper51.com

       sSvcName = GetStrFromPtrA(ByVal pntr(i).lpServiceName)

copyright paper51.com

       dwState = pntr(i).ServiceStatus.dwCurrentState 内容来自www.paper51.com

       .AddItemsDispName & vbTab & sSvcName & vbTab & GetServiceState(dwState) copyright paper51.com

        Next http://www.paper51.com

   End With 内容来自论文无忧网 www.paper51.com

        ……

copyright paper51.com

   EnumSystemServices = dwReturned ‘返回服务的数量 内容来自www.paper51.com

End Function 内容来自论文无忧网 www.paper51.com

以下是获取服务状态的函数:

copyright paper51.com

Private FunctionGetServiceState(dwState As Long) As String http://www.paper51.com

  Select Case dwState 内容来自www.paper51.com

      CaseSERVICE_STOPPED: GetServiceState = "停止" copyright paper51.com

      CaseSERVICE_START_PENDING: GetServiceState = "启动期间" 内容来自论文无忧网 www.paper51.com

      …… http://www.paper51.com

      CaseSERVICE_PAUSED: GetServiceState = "暂停"

paper51.com

      Case Else:GetServiceState = "" copyright paper51.com

   EndSelect http://www.paper51.com

End Function

http://www.paper51.com

------分隔线----------------------------
联系方式