用计算机名检索工作组,实例439 获取计算机名称和工作组

15.1  计算机与局域网

本小节主要介绍在局域网中如何获得计算机名称和工作组、如何设置计算机IP以及如何  判断输入的IP地址是否符合要求。

实例439  获取计算机名称和工作组

实例说明

在本实例运行时,检索整个网络中的计算机和工作组,并将其以树状形式显示。当用户单击相应的计算机名时,在相应的文本框中即可显示该计算机所在的相应的计算机和工作组。其实现效果如图15.1所示。

图12.5  对分组统计数据进行分析

技术要点

本实例的实现主要是通过使用WNetOpenEnum函数获得所有网络资源的信息过程,使用WNetEnumResource函数可以列出所有网络信息,使用WNetCloseEnum函数结束列举网络资源的过程。下面分别介绍这几个API函数。

WNetOpenEnum函数。用于启动对网络资源进行枚举过程。这个函数会返回由WNetEnumResource函数用于枚举资源所用的一个句柄。其声明形式如下:

Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA"

(ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long,

lpNetResource As Any, lphEnum As Long) As Long

WNetEnumResource函数。用于枚举网络资源。其声明形式如下:

Private Declare Function WNetEnumResource Lib "mpr.dll" Alias

"WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long,

ByVal lpBuffer As Long, ByRef lpBufferSize As Long) As Long

WNetCloseEnum函数。结束一个枚举操作。

Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long

实现过程

(1)新建一个标准工程,创建一个新窗体,默认名为Form1。

(2)在窗体上添加两个Label控件 ,用于显示提示信息,添加两个TextBox控件 ,分别用于显示计算机名和工作组。

(3)在窗体上添加一个TreeView 控件和一个ImageList 控件。由于这两个控件属于ActiveX控件,因此,在使用之前必须将其添加到工具箱。添加方法如下:

选择VB菜单的“工程”→“部件”,然后选取Microsoft Windows Common Controls 6.0(SP6),单击“确定”按钮,即可将TreeView控件和ImageList控件添加到工具箱中。命名TreeView控件为tvwNetwork,ImageList控件为imlNWImages,并将两个控件相连。设置Image控件的Picture属性。

(4)在窗体上添加一个Winsock控件 ,由于该控件属于ActiveX控件,因此,在使用之前必须将其添加到工具箱。添加方法如下:

选择VB菜单的“工程”→“部件”,然后选取Microsoft Winsock Control 6.0(SP5),单击“确定”按钮,即可将Winsock控件添加到工具箱中。

(5)主要程序代码。

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 = TrueDo

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 IfIf 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 < lMinIf 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 IfEnd Sub

举一反三

根据本实例,读者可以获得:

·网上邻居的所有信息。

·网络资源信息。

【责任编辑:杜书 TEL:(010)68476606】

回书目   上一节   下一节

原文:实例439 获取计算机名称和工作组返回读书频道首页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值