摘要:《软件工程师典藏——Visual Basic程序开发范例宝典》一书所选实例覆盖了开发中的热点问题和关键问题。全书按实际应用进行分类,可以使读者在短时间内掌握更多有用的技术,快速提高编程水平。本文介绍了获取局域网计算机名称和IP。
15.2 局域网控制与管理
局域网的管理是局域网编程中不可缺少的组成部分。网络管理者需要实时掌握局域网内部计算机的连接状态,局域网管理者也必须利用监测程序监测局域网内部所有的计算机。同时,为保证局域网的稳定,监测程序又不能占用过多的系统资源。本小节将介绍在局域网中如何实现获取局域网计算机名称和IP以及如何监控局域网上的计算机和用户信息。
实例442 获取局域网计算机名称和IP 实例说明
在本程序运行时,检索整个局域网,将局域网中的计算机显示在ListBox控件中,当用户单击ListBox控件中的计算机名时,右边的文本框就可以显示该计算机的机器名和对应的IP地址。其实现效果如图15.6所示。
技术要点 本实例的实现主要是通过使用WNetOpenEnum函数获得所有网络资源的信息过程,使用WNetEnumResource函数可以列出所有网络信息。使用WNetCloseEnum函数结束列举网络资源的过程。利用自定义函数GetIPAddress,获得所选择的计算机的IP地址。其中,全部的程序代码参见本书附带光盘。 实现过程 (1)新建一个标准工程,创建一个新窗体,默认名为Form1。 (2)在窗体上添加两个Frame控件 ,设置“名称”属性分别为Frame1和Frame2。 (3)在Frame1控件上添加一个ListBox控件 ,用于显示局域网络中的计算机名。 (4)在Frame2控件上添加两个Label控件 ,两个TextBox控件 ,分别命名为TxtCmpName和TxtIp,分别用于显示计算机名和该计算机的IP地址。 (5)在窗体上添加一个Image控件 ,用于显示图片信息。设置其Picture属性。 (6)主要程序代码。 Private Sub Form_Load() On Error Resume Next Const MAX_RESOURCES = 256 Const NOT_A_CONTAINER = -1 Dim bFirstTime As Boolean Dim lReturn As Long Dim hEnum As Long Dim lCount As Long Dim lMin As Long Dim lLength As Long Dim l As Long Dim lBufferSize As Long Dim lLastIndex As Long Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE_BUF Dim uNet() As NETRESOURCE bFirstTime = True Do If bFirstTime Then lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum) bFirstTime = False Else If uNet(lLastIndex).dwUsage And RESOURCEUSAGE_CONTAINER Then lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, uNet(lLastIndex), hEnum) Else lReturn = NOT_A_CONTAINER hEnum = 0 End If lLastIndex = lLastIndex + 1 End If If lReturn = NO_ERROR Then lCount = RESOURCE_ENUM_ALL Do lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2 lReturn = WNetEnumResource(hEnum, lCount, uNetApi(0), lBufferSize) If lCount > 0 Then ReDim Preserve uNet(0 To lMin + lCount - 1) As NETRESOURCE For l = 0 To lCount - 1 uNet(lMin + l).dwScope = uNetApi(l).dwScope uNet(lMin + l).dwType = uNetApi(l).dwType uNet(lMin + l).dwDisplayType = uNetApi(l).dwDisplayType uNet(lMin + l).dwUsage = uNetApi(l).dwUsage If uNetApi(l).pLocalName Then lLength = lstrlen(uNetApi(l).pLocalName) uNet(lMin + l).sLocalName = Space$(lLength) CopyMem ByVal uNet(lMin + l).sLocalName, ByVal uNetApi(l).pLocalName, lLength End If If uNetApi(l).pRemoteName Then lLength = lstrlen(uNetApi(l).pRemoteName) uNet(lMin + l).sRemoteName = Space$(lLength) CopyMem ByVal uNet(lMin + l).sRemoteName, ByVal uNetApi(l).pRemoteName, lLength End If Next l End If lMin = lMin + lCount Loop While lReturn = ERROR_MORE_DATA End If If hEnum Then l = WNetCloseEnum(hEnum) Loop While lLastIndex < lMin If UBound(uNet) > 0 Then For l = 0 To UBound(uNet) If uNet(l).dwDisplayType = RESOURCEDISPLAYTYPE_SERVER Then List1. AddItem uNet(l).sRemoteName Next l End If End Sub 举一反三
根据本实例,读者可以开发:
·根据用户的IP地址获得改IP地址的计算机名。 ·获得局域网络的资源情况。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务