windows系统辅助管理程序设计与开发—免费计算机毕业设计论文内容摘要:

ress()函数,在 text 文本框中分别显示出当前主机名和 IP地址。 获取物理地址 功能设计 这个窗体主要用来获取 MAC 地址,本模块使用 NetBIOS 网络编程 接口来获取网卡的物理地址。 NetBIOS API 只有一个函数 NetBIOS, 该函数解释和执行指定的网络控制块( NCB),函数的原型如下: UCHAR NetBIOS (PNCB pncb); pncb:指向 NCB 结构的指针,该结构描述了网络控制块。 在网络控制块结构中,包含了一个执行 NetBIOS 命令、相应的 NetBIOS 函数需要用到的全部信息。 NCB 结构的定义如下: private type NET_CONTROL_BLOCK ncb_mand as byte ncb_retcode as byte „„ ncb_event as long End type 进行任何 NetBIOS 调用之前,必须先将这个结构清零。 第 9 页 共 26 页 NetBIOS 提供了几个专门负责收集网络参数的命令,其中包括名字查找命令( NCBFINDNAME)和适配器状态命令 (NCBASTAT)。 这里主要讲述适配器状态命令,利用适配器状态命令,可取得与本地计算机及其 LANA 编号的有关信息。 适配器状态命令返回一个 ADAPTER_STATUS 结构和紧接其后的大量 NAME_BUFFER 结构。 ADAPTER_STATUS 结构定义如下: Private type ADAPTER_STATUS adapter_address(5) as byte 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, ) „„ = pASTAT Call Netbios(NCB) CopyMemory AST, , Len(AST) tmp = Format$(Hex((0)), 00) amp。 amp。 Format$(Hex((1)), 00) amp。 amp。 „„ Format$(Hex((5)), 00) „„ End Function 函数 GetMACAddress()为自定义函数,它通过调用 NetBIOS 函数来获取网卡的 MAC地址。 GetMACAddress()函数两次调用了 NetBIOS函数:第一次调用 NetBIOS函数采用的是 NCBRESET 命令,目的是重置所有的 LANA 编号;第二次调用采用的是适配器状态命令 NCBASTAT,通过它可以取得与本地计算机指定 LANA 编号有关的结构信息,从这个结构信息中,可以解析出网卡的物理地址。 第 10 页 共 26 页 界面实现 添加一个窗体,并按照下表设置窗体的属性 表 获取物理地址窗体设置表 窗体属性 取值 Name MACaddress Caption 获取物理地址 该窗体上添加 1个 label 控件, Caption 属性设置为‘ MAC 地址’, 1个 text控件, text 属性设置为空, 1个 mandbotton 控件, Caption 属性设置为‘运行’。 添加完毕后的窗体如图所示: 图 获取物理地址界面 点击按钮,程序调用 GetMACAddress()函数,在 text 控件中显示主机物理地址。 显示本机用户信息 功能设计 这个窗体主要用来显示系统中所有用户及其相关信息。 使用 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, 第 11 页 共 26 页 LPDWORD totalentries, LPDWORD resume_handle ); servername:一个指向 Unicode 字符串的指针,该字符串给出了执行该函数的远程服务器名,空指针或空字符串指明以本地机作为服务器。 level:定义返回信息的级别,本设计只返回枚举的用户名,使用 0 值,即返回 USER_INFO_0 的信息。 Entriesread:指向一个 DWORD 变量的指针。 该变量中包含了实际枚举的元素的数量。 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_ment as long Usr10_usr_ment as long Usr10_full_name as long End type 第 12 页 共 26 页 窗体中使用定义了 USER_INFO 结构存放实际显示的字符串。 窗体中使用自定义函数 GetUserEnumInfo()枚举本机用户: Private Function GetUserEnumInfo(bServername() As Byte) „„ CopyMemory users(0), ByVal buff, entriesread * 4 For t = 0 To entriesread 1 GetPointerToByteStringW(users(t)) Next t „„ 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) = GetPointerToByteStringW() = GetPointerToByteStringW() = GetPointerToByteStringW() = GetPointerToByteStringW()‘ GetPointerToByteStringW()为自定义函数,用于获取指针中的字符串 „„ End Function 界面实现 添加一个窗体,并按照下表设置窗体的属性 表 显示用户窗体设置表 窗体属性 取值 Name userinformation Caption 用户信息 第 13 页 共 26 页 该窗体首先添加一个 ListBox 控件,然后再添加 5 个 label 控件, Caption分别设置属性为服务器名、用户名、用户全名、描述、用户描述,添加 5个 text控件分别对应 5 个 Label 控件, text 属性均设为空,添加完毕后的窗体如图所示: 图 显示用户信息 当用 户单击工程主窗体上的‘用户信息’按钮,调用 GetUserEnumInfo()和rgbGetCompterName()函数,获取本机用户名和服务器名分别显示在 ListBox 和text1 控件中,用户单击列表框中的任一用户,调用 GetUserNetworkInfo()函数,获取 USER_INFO_10 结构中的用户信息,显示在下面对应的四个 text 文本框中。 显示工作站信息 功能设计 这个窗体主要用来显示工作站的配置信息和当前登陆的用户。 程序主要用NetWkstaGetInfo 函数使用的结构 WKSTA_INFO_102 带回工作站的环境信息,包括平台信息、域名(或工作组)、计算机名、登陆到计算机的用户数目以及操作系统的信息。 使用 NetWkstaUserEnum 函数使用的结构 WKSTA_USER_INFO_0,该结构仅有一个成员,带回当前登陆到工作站的用户名。 主要函数及结构定义如下: ( 1) NetWkstaGetInfo 函数 函数返回工作站的配置信息。 NET_API_STATUS NetWkstaGetInfo( LPWSTR servername, DWORD level, LPBYTE * bufptr 第 14 页 共 26 页 ); servername:远程服务器名字的 Unicode 字符串地址。 level:指定返回的信息的级别。 本程序使用 WKSTA_INFO_102 结构。 bufptr:一个缓存的指针,存放由参数 level 指定的数据。 函数调用成功,则返回 NERR_SUCCESS,否则,返回错误信息。 ( 2) WKSTA_INFO_102 结构 该结构包含了工作站环境信息,包括工作平台、域名、本机名称以及与操作系统有关的信息。 结构定义如下: Typedef struct_WKSTA_INFO_102( DWORD wki102_platform_id; ‘信息级别,用于返回平台信息 LPWSTR wki102_putername; ‘一个 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( LPW。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。