L2003215029_曹华娟_Windows系统辅助管理程序设计与开发_第1页
L2003215029_曹华娟_Windows系统辅助管理程序设计与开发_第2页
L2003215029_曹华娟_Windows系统辅助管理程序设计与开发_第3页
L2003215029_曹华娟_Windows系统辅助管理程序设计与开发_第4页
L2003215029_曹华娟_Windows系统辅助管理程序设计与开发_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号 分类号 TP311 1TP311 1 U U D D C C D10621 408 2007 D10621 408 2007 5962 5962 0 0 密密 级 公级 公 开开 编编 号 号 20032150292003215029 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 W Windowsindows 系统辅助管理程序设计与开发系统辅助管理程序设计与开发 论论文作者姓名 文作者姓名 曹曹华华娟娟 申申请请学位学位专业专业 网网络络工程工程 申申请请学位学位类别类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 蒋毅蒋毅 讲师讲师 论论文提交日期 文提交日期 2007 年年 06 月月 08 日日 W Windowsindows 系统辅助管理程序设计与开发系统辅助管理程序设计与开发 摘摘 要要 随着信息化 网络化 数字化成为社会发展的大趋势 信息化浪潮冲击着 人类社会的各个领域 网络管理和搜索系统一直以来都是计算机的重要功能 通过对非计算机行业的用户使用计算机的调查了解 用户希望有一个操作简单 界面友好的工具集 在这种情况下 该系统开发了一个获取基本信息的网络工 具集和一个简易的文件查找系统 本设计采用 Visual BASIC 开发工具 有效的 实现了对本机地址 用户信息 工作站信息 服务信息的查看 获取目的网络 的连接状态 还可根据用户需求设定搜索文件 在设计中以需求分析为基础 写出系统开发计划 规划实现流程及相关问题的实现方法 设计过程遵循软件 工程的方法 完成了 windows 系统辅助管理程序的设计与开发 为不熟悉 windows 系统操作的用户提供了一个便捷的操作环境 关键词关键词 网络管理 文件搜索 Visual BASIC The Design and Development of Windows Supplementary Management Program Abstract Nowadays the main streams of social development are information based network and digitalization Under these steams the impact on the tide of information touches on every field of human society The network management and searching system has always been being the important functions of the computer After conveying users who are in non computer majoring industry we can learn that users would like to have a tool center that can easily operate and has a friendly interface Therefore a simple net tool center for basic information gaining and a simple document searching system are developed In this design Visual BASIC is adopt as a developing tool and it helps realize checking up the address of the computer itself information of the users of the web sites as well as of the service it also helps realize gaining the link state of the target net besides it can set up document searching in accordance with the users needs The process of the design which is on the basis of the analysis of need shall write the systematic development plan program the realizing flow and the realizing methods of some related problem The design is followed the process of software engineering methods and then design and development a windows system auxiliary management processes which is for the unfamiliar users with the windows operating system with a convenient operating environment Key words net management file searching Visual BASIC 目目 录录 论文总页数 26 页 1引言 1 1 1课题背景 1 1 2国内外研究现状 1 1 3本课题研究的意义 1 1 4本课题的研究方法 1 2需求分析 1 2 1需求调研 1 2 2开发运行环境 2 2 3软件设计 4 3系统工具设计与实现 5 3 1获取主机名和 IP 地址 5 3 1 1功能设计 5 3 1 2界面实现 7 3 2获取物理地址 8 3 2 1功能设计 8 3 2 2界面实现 10 3 3显示本机用户信息 10 3 3 1功能设计 10 3 3 2界面实现 12 3 4显示工作站信息 13 3 4 1功能设计 13 3 4 2界面实现 15 3 5列举本机服务 16 3 5 1功能设计 16 3 5 2界面实现 19 3 6目的地是否可达 19 3 6 1功能设计 19 3 6 2界面实现 21 3 7文件搜索详细设计 21 3 7 1功能设计 21 3 7 2界面实现 23 4测试 24 结 论 24 参考文献 24 致 谢 25 声 明 26 第 1 页 共 26 页 1 1 引言引言 1 11 1 课题背景课题背景 Windows 这个优秀的图形化操作系统 如今已深入人心 成了 PC 机市场中 的绝对主流操作系统 Internet 的发展是计算机技术的发展热点 如何在 Windows 平台下开发出简易 出色的应用程序便成了一个很值得讨论的问题 1 21 2 国内外研究现状国内外研究现状 随着计算机使用的普及 网络使用的快速发展 计算机技术带给人们的方 便令人感叹 越来多的人享受着电脑和网络带来的便利 在这些过程中 不可 避免的要对文件查找 本机上的一些信息的查看 以便更好 更快的利用资源 因此 大量的系统操作工具也应运而生 一些工具功能强大 比如一些文件查 找工具 用户需在界面上输入精确关键字 或是包括其他一些信息才能实现查 找的功能 也许一些用户只记得文件名的一部分 或是对于一些对系统操作或 是系统相关知识不太熟悉的用户来说 一些功能或选项反而让人觉得模糊 不 知道其功能 又比如一些本机信息查看工具 如地址 用户 服务等信息的查 看 一些网络工具使那些对操作或信息不熟悉的用户面临同样的捆扰 而且 如何更快 更高效的得到用户需要的信息 也是工具开发必须考虑的问题 面 对形形色色的 助手 当务之急的问题就是针对这些初级用户开发一个简易 快捷 操作方便的应用工具 1 31 3 本课题研究的意义本课题研究的意义 随着计算机使用的普及 网络的快速发展 计算机技术带给人们的方便令 人感叹 但人们正在享受这些便利时 一些潜在的隐患却给不少用户带来不必 要的麻烦 如搜索知道部分关键字的文件 又如查看本机用户 地址 服务等 信息 对 WINDOWS 系统操作不熟悉的用户来说就显得比较盲目 为了解决以上 问题所带来的麻烦 提高信息技术应用效率 本设计开发一个 WINDOWS 辅助管 理工具 为不熟悉 WINDOWS 系统操作的人员提供一个更方便 快捷的操作环境 1 41 4 本课题的研究方法本课题的研究方法 Windows 系统动态连接库提供了丰富的 API 这些函数可为 VB 应用程序所 调用 只要将 DLL 中的函数按一定的规则在 VB 中进行声明 就可以调用这些 API 函数 实现其中功能 程序编写简洁 易懂 文件搜索采用 VB 提供的一些 功能 实现对文件和文件夹的处理 2 2需求分析需求分析 2 12 1 需求调研需求调研 通过对非计算机行业使用计算机的人调查 了解他们对计算机使用中需要 第 2 页 共 26 页 的功能进行分析 了解了用户需求后 对系统进行开发和设计 为不熟悉 WINDOWS 系统操作的人员提供一个更方便 快捷的操作环境 2 22 2 开发运行环境开发运行环境 1 安装此系统所需的基本软 硬件环境为 Windows 2000 XP Visual Basic 6 0 486DX 66MHz 或更高的处理器 32MB 以上内存 VGA 显示器 CD ROM 驱动器 本程序在 Windows 操作系统下 以中文版 Visual Basic6 0 为前台开发工 具 其中主要通过调用 API 函数来实现各功能 以下对本设计主要的开发软件 Visual Basic6 0 做个概述 2 Visual Basic6 0 概述 Visual Basic 提供了开发 Windows 应用程序最迅速 最简洁的方法 它提 供了一整套工具 供用户开发应用程序 Visual 指的是开发图形用户界面 GUI 的方法 在图形用户界面下 不需要编写大量的代码去描述界面元素的 外观和位置 而只要把预先建立的对象加到屏幕上的适当位置 再进行简单的 设置即可 Basic 指的是 BASIC Beginners All Purpose Symbol Instruction Code 语言 是一种十分广泛的计算机语言 Visual Basic 在原 有 BASIC 语言的基础上进一步发展 至今包含了数百条语句 函数及关键词 其中很多和 Windows GUI 有直接关系 专业人员可以用 Visual Basic 实现其 他任何 Windows 编程语言的功能 而初学者只要掌握几个关键词就可以建立简 单的应用程序 Visual Basic 6 0 与以前的版本不同 它是 Visual Studio 家族的一个组件 保留了 Visual Basic 5 0 的优点 如在开发环境上的改进 增加了工作组 在代码编辑器中提供了控件属性 方法的自动提示 能编译生 成本机代码 大大提高程序的执行速度等 同时 Visual Basic 6 0 在数据技 术 Internet 技术及智能化向导方面都有了许多新的特性 1 数据访问的新特性 Visual Basic 6 0 在数据访问技术方面比 Visual Basic 5 0 有了很大的增强 首先 它采用了一种新的数据访问技术 ADO Active Data Object 使之能更好地访问本地和远程的数据库 其次 在 数据环境方面 允许程序员可视化地创建和操作 ADO 连接及命令 为程序员操 作数据源提供了很大的方便 第三 增加了 ADO 控件和集成的可视化数据库工 具 第 3 页 共 26 页 2 Internet 功能的增强 Internet 是当今发展的潮流 Visual Basic 6 0 在 Internet 方面的在增强使得它已成为当前最强有力的开发工具之一 IIS 程序设计 专业版和企业版中都有 用 Visual Basic 6 0 可直接 创建 IIS 应用程序 响应用户的要求 DHTML 的设计 利用 Visual Basic6 0 程序员可直接通过 Visual Basic 代码来实现动态网页的设计 Internet Explorer 4 X 对下载 ActiveX 文档的支持 3 控件 语言和向导方面的新增特性 DataGrid DataList DataCombo 等新增的数据控件 相当于 DB 版本 的 DB Grid OLEDBList 和 DBCombo 所不同的是它们都支持新的 ADO 控件 可以创建自己的数据源和数据绑定对象 函数可以将数组作为返回值 并且可以为可变大小的数组赋值 安装向导 数据对象向导 数据窗体向导以及应用程序向导 这些新增 的向导及功能增强的向导 可以使开发人员能设计出更优秀的应用程序 4 高度可移植化的代码 代码的可移植性是面向对象编程的一个重要特点 Visual Basic 6 0 集成了 Visual Component Manager VCM 可视化模块设计器 5 创建 ActiveX 控件更加轻松方便 用 Visual Basic 6 0 创建 ActiveX 控件 其外观和行为均和用 语言编写的控件一样 可以用在 Visual C Visual Basic Delphi 甚至 Word Access 中 6 Visual Basic 6 0 有两张光盘的文档资料 包括 Visual Basic 6 0 程序员设计手册 全文搜索索引 Visual Basic 文档 VB Documentation Visual Basic 程序样例 VB Product Samples 等 3 Visual Basic 6 0 集成开发 第 4 页 共 26 页 图 2 1 VB 开发环境图 左面是 VB 的工具箱里面的各种图标是我们开发程序时经常用到的标准控件 正中间是窗体编辑器 又称对象窗口 我们程序的界面 大部分是在它上 面设计的 右上方是工程资源管理器 它能让我们对整个工程进行整体性的管理 右中处的是属性窗口 陈列着程序中所涉及的各种窗体和控件的属性 右下方是窗体布局区 它能够调节程序运行时窗体在屏幕中的位置 总结 以非计算机行业的用户为分析对象 确定该系统开发的方向 最后 确定其应该具备的功能 以确定系统的主要模块 也简单介绍了该软件的开发 环境和运行条件 2 32 3 软件设计软件设计 1 功能模块初步设计 通过对用户需求调研并分析 确定系统应具备的功能 包括 获取主机名 和 IP 地址 获取物理地址 显示本机用户信息 显示工作站信息 列举本机服 务 测试目的地是否可达 文件查找 各功能设计如下 1 获取主机名和 IP 地址 对用户而言要想轻松地在网络中遨游 首先必须对本地主机的网络配置信 息有清晰的了解 如主机名 IP 地址 所注册的域等 在网络编程中 一般都 需要获取本地主机的主机名和 IP 地址 起码应该将这些信息显示给用户 让其 感到程序界面的友好性 2 获取物理地址 第 5 页 共 26 页 Windows 下的 TCP IP 协议允许计算机通过网络与另一台计算机通过 IP 地 址 主机名或 NETBIOS 名称进行通信 但是 当计算机间使用上述三种名称进 行通信时 这些名称都必须解析为硬件地址 即 MAC 地址 如何获取计算机上 安装的网卡的物理地址是一个重要问题 3 显示本机用户信息 由于 Windows 设计已达到了 C2 标准 C2 标准建立在用户级别的权限管理 基础上 因此任何 Windows 中与安全性有关的问题都要先查看用户账号的相关 信息 用户账号是 Windows 常用的最小的用户身份标识 任何行为都直接与它 的用户账号相联系 但是 管理整个系统的所有用户的权限是一个费时费力的 工作 特别是用户很多的情况下 通过一个简易的用户显示工具 管理员可以 很快的知道用户对某种资源有什么权限 4 显示工作站信息 获取工作站的配置信息 如工作站的操作平台信息 操作系统版本信息等 以及工作站上的登陆用户信息 5 列举本机服务 了解网络机器提供的服务信息非常有用 它可以让用户充分了解机器的性 能和功用 对服务进行管理 6 测试目的地是否可达 随着网络的普及 网络资源的丰富给很多用户带来很大的便利 获取网络 的连接状态能更高效的利用网络资源 7 文件查找 查找文件是每个用户经常遇到的事情 因此 一个简洁 方便的文件搜索 工具将受到大家的青睐 2 模块的组织结构图 第 6 页 共 26 页 Windows 辅助管理程序设计与开发 网络工具文件查找 显 示 主 机 名 和 IP 地 址 获 取 物 理 地 址 显 示 用 户 信 息 工 作 站 及 用 户 信 息 本 机 服 务 目 的 地 是 否 可 达 图 2 2 功能模块图 3 3系统工具设计与实现系统工具设计与实现 3 13 1 获取主机名和获取主机名和 IPIP 地址地址 3 1 13 1 1 功能功能设计设计 这个窗体主要用来获取本地主机名和 IP 地址 获取本地主机名及 IP 地址 通过 WinSock API 编程实现 应用程序在使用 WinSock API 之前 必须先成功 调用函数 WSAStartup 对 WinSock DLL 进行初始化 协商 WinSock DLL 的版本 支持 并分配必要的资源 如果在调用 WinSock 函数之前 没有加载 WinSock DLL 则会返回 SOCKET ERROR 错误 错误信息是 WSANOTINITIALISED 而应用 程序结束时 调用 WSACleanup 函数终止对 Winsock DLL 的使用 并释放资源 以备下一次使用 模块使用 WSAGetLastError 函数返回上次发生的网络错误 当一特定的 Winsock Sockets API 函数指出已经发生了一个错误 则调用本函 数来获得相应的错误代码 功能实现主要函数和结构 1 gethostname 函数返回本地主机的标准主机名 函数原型如下 int PASCAL FAR gethostname char FAR name int namelen name 一个指向要存放主机名的缓冲区指针 namelen 缓冲区的长度 该函数把本地主机名存放在由 name 参数指定的缓冲区中 返回的主机名是 第 7 页 共 26 页 一个以空字符结尾的字符串 主机名的形式取决于 Windows Sockets 的实现 也就是说 它可以是一个简单的主机名 也可以是一个域名 如果函数调用成 功 则返回 0 否则返回 SOCKET ERROR 应用程序可调用函数 WSAGetLastError 来获取详细的错误信息 2 Gethostbyname 函数根据主机名称返回相应的信息 函数原型如下 Struct hostent FAR gethostbyname Const char FAR name name 一个以空字符结尾的表示主机名的字符串 函数 gethostbyname 返回一个 HOSTENT 结构的地址 该结构由 Windows 套 接字分配 应用程序不能修改本结果或释放它的某个成员 函数 gethostbyname 不能解析传递给它的 IP 地址字符串 也就是说 如果向函数传 递一个 IP 地址字符串作为参数 则函数认为这是一个未知的主机名参数 如果 要想通过机器的 IP 地址字符串获取相应的主机信息 可以先调用函数 inet addr 将 IP 地址字符串转换为实际的 IP 地址 然后使用函数 gethostbyaddr 来得到 HOSTENT 结构中的信息 函数 gethostbyname 可以成功 解析由函数 gethostname 返回的主机名字符串 如果成功 则函数返回一个指 向 HOSTENT 结构的指针 否则 函数返回一个 NULL 指针 若调用函数 WSAGetLastError 还可得到相应的错误代码 3 结构 HOSTENT 结构的定义如下 Struct hostent Char FAR h name Char FAR FAR h aliases Short h addrtype Short h length Char FAR FAR h addr list h name 主机名的官方名称 h aliases 可选择的别名数组 该数组以 NULL 结尾 h addrtype 返回的地址的类型 h length 每个地址的字节长度 h addr lis 一个以 NULL 结尾的主机地址列表 窗体使用自定义函数 GetIPAddress 实现本地主机 IP 地址的获取 Private Function GetIPAddress As String 第 8 页 共 26 页 sHostName Trim sHostName lpHost gethostbyname sHostName 为展开返回的 IP 地址 将 HOST 结构及其数据复制到变量中 CopyMemory tmpIPAddr 1 dwIPAddr HOST hLen For i 1 To HOST hLen 由结果数组建立实际的 IP 地址 sIPAddr sIPAddr tmpIPAddr i Next End Function 窗体使用函数 GetIPHostName 实现主机名的获取 Private Function GetIPHostName As String GetIPHostName Left sHostName InStr sHostName Chr 0 1 socketscleanup End Function 3 1 23 1 2 界面界面实现实现 添加一个窗体 并按照下表设置窗体的属性 表 3 1 获取主机名和 IP 地址窗体设置表 窗体属性取值 Namenameandip Caption获取主机名及 IP 地址 该窗体添加 2 个 label 控件 Caption 属性分别设置为 主机名 IP 地 址 2 个 text 控件 text 属性均设为空 个 commandbotton 控件 Caption 属性设置为 运行 添加完毕后的窗体如图所示 第 9 页 共 26 页 图 3 1 显示主机名和 IP 地址界面 单击按钮 调用 GetIPHostName 和 GetIPAddress 函数 在 text 文本框 中分别显示出当前主机名和 IP 地址 3 23 2 获取物理地址获取物理地址 3 2 13 2 1 功能功能设计设计 这个窗体主要用来获取 MAC 地址 本模块使用 NetBIOS 网络编程接口来获 取网卡的物理地址 NetBIOS API 只有一个函数 NetBIOS 该函数解释和执行指 定的网络控制块 NCB 函数的原型如下 UCHAR NetBIOS PNCB pncb pncb 指向 NCB 结构的指针 该结构描述了网络控制块 在网络控制块结 构中 包含了一个执行 NetBIOS 命令 相应的 NetBIOS 函数需要用到的全部信 息 NCB 结构的定义如下 private type NET CONTROL BLOCK ncb command as byte ncb retcode as byte ncb event as long End type 进行任何 NetBIOS 调用之前 必须先将这个结构清零 NetBIOS 提供了几个专门负责收集网络参数的命令 其中包括名字查找命 令 NCBFINDNAME 和适配器状态命令 NCBASTAT 这里主要讲述适配器状态命 令 利用适配器状态命令 可取得与本地计算机及其 LANA 编号的有关信息 适 配器状态命令返回一个 ADAPTER STATUS 结构和紧接其后的大量 NAME BUFFER 结 构 ADAPTER STATUS 结构定义如下 Private type ADAPTER STATUS adapter address 5 as byte 第 10 页 共 26 页 rev major as byte Name count as integer End type 在 ADAPTER STATUS 结构中 最重要的成员是 adapter address 成员 它表 示的是网卡的 MAC 地址 使用函数 GetMACAddress 实现物理地址的获取 Private Function GetMACAddress As String pASTAT HeapAlloc GetProcessHeap HEAP GENERATE EXCEPTIONS Or HEAP ZERO MEMORY NCB ncb length NCB ncb buffer pASTAT Call Netbios NCB CopyMemory AST NCB ncb buffer Len AST tmp Format Hex AST adapt adapter address 0 00 Format Hex AST adapt adapter address 1 00 Format Hex AST adapt adapter address 5 00 End Function 函数 GetMACAddress 为自定义函数 它通过调用 NetBIOS 函数来获取网 卡的 MAC 地址 GetMACAddress 函数两次调用了 NetBIOS 函数 第一次调用 NetBIOS 函数采用的是 NCBRESET 命令 目的是重置所有的 LANA 编号 第二次 调用采用的是适配器状态命令 NCBASTAT 通过它可以取得与本地计算机指定 LANA 编号有关的结构信息 从这个结构信息中 可以解析出网卡的物理地址 3 2 23 2 2 界面界面实现实现 添加一个窗体 并按照下表设置窗体的属性 表 3 2 获取物理地址窗体设置表 窗体属性取值 NameMACaddress Caption获取物理地址 该窗体上添加 1 个 label 控件 Caption 属性设置为 MAC 地址 1 个 第 11 页 共 26 页 text 控件 text 属性设置为空 1 个 commandbotton 控件 Caption 属性设置 为 运行 添加完毕后的窗体如图所示 图 3 2 获取物理地址界面 点击按钮 程序调用 GetMACAddress 函数 在 text 控件中显示主机物理 地址 3 33 3 显示本机用户信息显示本机用户信息 3 3 13 3 1 功能功能设计设计 这个窗体主要用来显示系统中所有用户及其相关信息 使用 API 函数 GetComputerName 获取服务器名 使用 API 函数 NetUserEnum 返回 PDC BDC 用 户管理器 User Manager 中定义的所有用户 显示在 ListBox 控件中 调用 API 函数 NetUserGetInfo 函数 并使用其中的 USER INFO 10 结构返回当前服 务器上指定用户的信息 包括用户名 用户全名 描述和用户描述信息 显示 在对应的文本框里 其主要的函数和结构如下 1 NetUserEnum 函数 NET API STATUS NetUserEnum LPWSTR servername DWORD level LPDWORD entriesread LPDWORD totalentries LPDWORD resume handle servername 一个指向 Unicode 字符串的指针 该字符串给出了执行该函 数的远程服务器名 空指针或空字符串指明以本地机作为服务器 level 定义返回信息的级别 本设计只返回枚举的用户名 使用 0 值 即 返回 USER INFO 0 的信息 Entriesread 指向一个 DWORD 变量的指针 该变量中包含了实际枚举的元 第 12 页 共 26 页 素的数量 resume handle 指向一个 DWORD 变量的指针 给出了重用句柄 resume handle 它用于继续查找存在的用户 如果函数调用成功 则返回 NERR SUCCESS 否则 返回错误代码 该函数 不会返回 windows 所有的系统用户 它只能返回由函数 NetUserAdd 添加的用户 2 NetUserGetInfo 函数 NET API STATUS NetUserGetInfo LPWSTR servername LPWSTR username DWORD level LPBYTE bufptr servername 一个指向 Unicode 字符串的指针 该字符串给出了执行该函 数的远程服务器名 空指针或空字符串指明以本地机作为服务器 username 一个指向 Unicode 字符串的指针 该字符串给出了将返回信息 的用户名称 level 定义返回信息的级别 本设计只返回枚举的用户名 使用 10 值 即返回 USER INFO 10 结构的信息 如果函数调用成功 则返回 NERR SUCCESS 否则 返回错误代码 3 USER INFO 10 结构 Private type USER INFO 10 Usr10 name as long Usr10 comment as long Usr10 usr comment as long Usr10 full name as long End type 窗体中使用定义了 USER INFO 结构存放实际显示的字符串 窗体中使用自定义函数 GetUserEnumInfo 枚举本机用户 Private Function GetUserEnumInfo bServername As Byte CopyMemory users 0 ByVal buff entriesread 4 For cnt 0 To entriesread 1 List1 AddItem GetPointerToByteStringW users cnt 第 13 页 共 26 页 Next cnt End Function 以服务器名和当前选中用户名为参数 调用函数 返回 USER INFO 10 结构 中的用户信息 GetPointerToByteStringW 函数获取指针所指的字符串信息 窗体使用自定义函数 GetUserNetworkInfo 实现获取各个用户详细信息 Private Function GetUserNetworkInfo bServername As Byte bUsername As Byte As USER INFO CopyMemory usrapi ByVal buff Len usrapi GetUserNetworkInfo name GetPointerToByteStringW usrapi usr10 name GetUserNetworkInfo full name GetPointerToByteStringW usrapi usr10 full name GetUserNetworkIment GetPointerToByteStringW usrapi usr10 comment GetUserNetworkInfo usr comment GetPointerToByteStringW usrapi usr10 usr comment GetPointerToByteStringW 为 自定义函数 用于获取指针中的字符串 End Function 3 3 23 3 2 界面界面实现实现 添加一个窗体 并按照下表设置窗体的属性 表 3 3 显示用户窗体设置表 窗体属性取值 Nameuserinformation Caption用户信息 该窗体首先添加一个 ListBox 控件 然后再添加 5 个 label 控件 Caption 分别设置属性为服务器名 用户名 用户全名 描述 用户描述 添加 5 个 text 控件分别对应 5 个 Label 控件 text 属性均设为空 添加完毕后的窗体如 图所示 第 14 页 共 26 页 图 3 3 显示用户信息 当用户单击工程主窗体上的 用户信息 按钮 调用 GetUserEnumInfo 和 rgbGetCompterName 函数 获取本机用户名和服务器名分别显示在 ListBox 和 text1 控件中 用户单击列表框中的任一用户 调用 GetUserNetworkInfo 函数 获取 USER INFO 10 结构中的用户信息 显示在下面对应的四个 text 文 本框中 3 43 4 显示工作站信息显示工作站信息 3 4 13 4 1 功能功能设计设计 这个窗体主要用来显示工作站的配置信息和当前登陆的用户 程序主要用 NetWkstaGetInfo 函数使用的结构 WKSTA INFO 102 带回工作站的环境信息 包 括平台信息 域名 或工作组 计算机名 登陆到计算机的用户数目以及操作 系统的信息 使用 NetWkstaUserEnum 函数使用的结构 WKSTA USER INFO 0 该 结构仅有一个成员 带回当前登陆到工作站的用户名 主要函数及结构定义如 下 1 NetWkstaGetInfo 函数 函数返回工作站的配置信息 NET API STATUS NetWkstaGetInfo LPWSTR servername DWORD level LPBYTE bufptr servername 远程服务器名字的 Unicode 字符串地址 第 15 页 共 26 页 level 指定返回的信息的级别 本程序使用 WKSTA INFO 102 结构 bufptr 一个缓存的指针 存放由参数 level 指定的数据 函数调用成功 则返回 NERR SUCCESS 否则 返回错误信息 2 WKSTA INFO 102 结构 该结构包含了工作站环境信息 包括工作平台 域名 本机名称以及与操 作系统有关的信息 结构定义如下 Typedef struct WKSTA INFO 102 DWORD wki102 platform id 信息级别 用于返回平台信息 LPWSTR wki102 computername 一个 Unicode 字符串指针 是本 地计算机名 LPWSTR wki102 langroup 一个 Unicode 字符串指针 包含了 计算机所属域名称 DWORD wki102 ver major 操作系统的主版本号 DWORD wki102 ver minor 操作系统的次版本号 LPWSTR wki102 lanroot DWORD wki102 logged on users 登陆到本地计算机上的用户数 WKSTA INFO 102 PWKSTA INFO 102 LPWKSTA INFO 102 3 NetWkstaUserEnum 函数 该函数枚举当前登陆到工作站的所有用户信息 只有本地组的管理员可以 在本机或远程机上成功执行该函数 函数原型 NET API STATUS NetWkstaUserEnum LPWSTR servername DWORD level LPBYTE bufptr LPDWORD entriesread LPDWORD totalentries servername 远程服务器名字的 Unicode 字符串地址 Level 指定返回的信息的级别 本程序使用 WKSTA USER INFO 0 结构 Bufptr 函数返回时 它是指向返回的数据信息结构的指针 Entriesread 表明实际枚举列表的元素个数 Totalentries 表明当前可重用位置的可枚举的入口总数 函数调用成功 则返回 NERR SUCCESS 否则 返回 ERROR INVALID LEVEL 第 16 页 共 26 页 表示参数 level 指定的值无效 4 WKSTA USER INFO 0 结构 该结构包含了指定工作站上的用户名信息 其定义如下 Typedef struct WKSTA USER INFO 0 LPWSTR wkui0 username 当前的登陆到工作站的用户名 WKSTA USER INFO 0 PWKSTA USER INFO 0 LPEKSTA USER INFO 0 窗体使用自定义函数 GetWorkstationUserName 显示登陆到当前工作站的 用户名 Private Function GetWorkstationUserName ByVal dwWorkstation As Long As String success NetWkstaUserEnum dwWorkstation 0 bufptr MAX PREFERRED LENGTH dwEntriesread dwTotalentries dwResumehandle If dwEntriesread 0 Then CopyMemory wui0 ByVal bufptr nStructSize GetWorkstationUserName GetPointerToByteStringW wui0 wkui0 username Call NetApiBufferFree bufptr 释放缓存并退出 Exit Function End If End Function 3 4 23 4 2 界面界面实现实现 添加一个窗体 并按照下表设置窗体的属性 表 3 4 显示工作站信息窗体设置表 窗体属性取值 Namedetail Caption网络工作站及当前用户信息 该窗体首先添加一个 ListBox 控件 然后在控件上添加 8 个 label 控件 其中 6 个对应返回的工作站信息分别设置其 Caption 属性 另一个 Label 控件 设置标题为 函数调用成功 0 或错误次数 剩余一个 Label 控件标题为 调用 NetWkstaGetInfo 函数出错的次数 无错则返回 0 1 个 commandbotton 第 17 页 共 26 页 控件 添加完毕后的窗体如图所示 图 3 4 显示工作站信息 用户单击按钮 获取 WKSTA INFO 102 结构中的工作站信息 调用函数 GetWorkstationUserName 返回指定机器的当前注册用户名 列表框中将显示 出工作站的配置信息 用户数目以及登陆用户名 3 53 5 列举本机服务列举本机服务 3 5 13 5 1 功能功能设计设计 这个窗体主要用来列举本机在指定的服务控制管理器 SCM Service Control Manager 数据库中的服务 返回每个服务的名称和状态信息 使用 API 函数 EnumServicesStatus 枚举指定的 SCM 数据库中的服务 包括服务的名 称和状态 为了成功调用函数 EnumServicesStatus 必须先调用函数 OpenSCManager 打开服务管理数据库 一旦获得了数据库的句柄 就可以调用 该函数了 获取的相关信息记录在 ENUM SERVICE STATUS 结构中 并由 SERVICE STATUS 结构返回服务的有关信息 程序执行时 首先调用 EnumServicesStatus 函数获取服务信息 然后判断是否枚举成功 并枚举了所 有服务信息 若完成 则调用相关函数将信息返回显示在列表框中 其中主要 的函数及结构定义如下 1 函数 OpenSCManager SC HANDLE OpenSCManager LPCTSTR lpMachineName 机器名地址 LPCTSTR lpDatabaseName 数据库名地址 DWORD dwDesireAccess 访问类型 本程序使用 SC MANAGER ENUMERATE SERVICE 类型 允许调用 EnumServicesStatus 函 数来列举数据库中的服务 2 函数 EnumServicesStatus BOOL EnumServiceStatus 第 18 页 共 26 页 SC HANDLE hSCManager DWORD dwServiceType DWORD dwServiceState LPENUM SERVICE STATUS lpServices LPDWORD lpServicesReturned LPDWORD lpResumeHandle hSCManager SCM 数据库的句柄 由函数 OpenSCManager 返回 dwServiceType 枚举的服务类型 本程序使用 SERVICE WIN32 类型 枚举 SERVICE WIN32 OWN PROCESS 和 SERVICE WIN32 SHARE PROCESS 类型的服务 dwServiceState 程序使用 SERVICE STATE ALL 类型 枚举处于 SERVICE ACTIVE 和 SERVICE INACTIVE 运行状态的服务 lpServices 一个 ENUM SERVICE STATUS 结构的数组指针 其中包含了返 回的数据库中的每个服务的名称和服务状态的信息 pcbBytesNeeded 指向一个 DWORD 变量的指针 该变量给出了接收剩余的 服务入口所需的缓冲的字节数量 lpResumeHandle 指向一个 DWORD 变量的指针 该变量是一个输入 输出参 数 用于输入时 它指定了枚举开始的入口地址 用于输出时 如果函数调用 成功 则该参数的值为 0 如果函数调用成功 则返回非零值 否则返回 0 可调用函数 GetLastError 来获取详细的错误信息 3 ENUM SERVICE STATUS 结构 Typedef struct ENUM SERVICE STATUS LPTSTR lpServiceName 指明了 SCM 数据库中的服务的名 称 SERVICE STATUS ServiceStatus 指定一个 SERVICE STATUS 结构 结构中包含了返回的 lpServiceName 指定的服务状态信息 ENUM SERVICE STATUS LPENUM SERVICE STATUS 4 SERVICE STATUS 结构 Typedef struct SERVICE STATUS DWORD dwServiceType 标明返回的服务类型 DWORD dwCurrentState 指明服务的当前状态 第 19 页 共 26 页 SERVICE STATUS LPSERVICE STATUS 窗体中使用函数 EnumSystemServices 枚举系统中的用户 Private function EnumSystemServices ct1 as control as long If EnumServicesStatus hSCManager SERVICE WIN32 SERVICE STATE ALL pntr 0 cbBuffSize cbRequired dwReturned hEnumResume Then 从 pntr 数组中提取所需的信息 With List1 Clear For

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论