Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As LongPrivate Type NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As String lpRemoteName As String lpComment As String lpProvider As String End TypePrivate Const RESOURCE_GLOBALNET = &H2& '用在WNetOpenEnum中的第一个参数,表示要枚举所有网络资源(包括已连接的和未连接的) Private Const RESOURCETYPE_ANY = &H0 '用在WNetOpenEnum中的第二个参数,表示要枚举所有资源(包括磁盘和打印机) Private Const RESOURCETYPE_DISK = &H1 '用在WNetOpenEnum中的第二个参数,表示要枚举所有磁盘(文件夹)资源 Private Const RESOURCETYPE_PRINT = &H2 '用在WNetOpenEnum中的第二个参数,表示要枚举所有打印设备资源Public Function EnumDomain() As Boolean Dim NetS As NETRESOURCE Dim MaxDomain As Integer Dim Buf(1024) As Byte Dim TmpReturn As Long Dim TmpStr As String Dim hEnumReturn As Long Dim I As Integer TmpReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetS, hEnumReturn) If TmpReturn <> 0 Then '如果失败是话,退出函数 EnumDomain = False Exit Function End IfTmpReturn = WNetEnumResource(hEnumReturn, -1, Buf(0), 1024) 'hEnmReturn是上面的语句得到的句柄 Call WNetCloseEnum(hEnumReturn) 'hEnmReturn是上面的语句得到的句柄 If TmpReturn <> 0 Then '如果失败是话,退出函数 EnumDomain = False Exit Function End IfFor I = 1 To 1023 '处理缓冲区的数据 '前面的200个字节是没有用的 If Buf(I) <> "0" And Buf(I) <> Space(0) Then TmpStr = TmpStr & Chr(Val(Buf(I)))
Else
If TmpStr <> "" Then
If Trim(TmpStr) = "Microsoft Network" Then TmpStr = "" Else FrmMain.Combo_WorkGroup.AddItem TmpStr FrmMain.Combo_WorkGroup.Text = TmpStr TmpStr = "" End If
End If
End IfNext I EnumDomain = TrueEnd FunctionPrivate Sub CmdListWorkGroup_Click() FrmMain.Combo_WorkGroup.Clear EnumDomain If EnumDomain = False Then MsgBox "取得工作组失败!" End SubPublic Sub Combo_WorkGroup_Click() Me.List_ComputerName.Clear Dim NetS As NETRESOURCE 'Dim MaxDomain As Integer Dim Buf(1024) As Byte Dim TmpReturn As Long Dim TmpStr As String Dim hEnumReturn As Long Dim I As Integer NetS.lpRemoteName = FrmMain.Combo_WorkGroup.Text TmpReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetS, hEnumReturn) If TmpReturn <> 0 Then '如果失败是话,退出函数 ' EnumDomain = False Exit Sub End IfTmpReturn = WNetEnumResource(hEnumReturn, -1, Buf(0), 1024) If TmpReturn <> 0 Then '如果失败是话,退出函数 ' EnumDomain = False Exit Sub End IfCall WNetCloseEnum(hEnumReturn)For I = 200 To 1023 '处理缓冲区的数据
If Buf(I) <> "0" Then TmpStr = TmpStr & Chr(Val(Buf(I)))
Else
If TmpStr <> "" Then
If Trim(TmpStr) = "Microsoft Network" Then TmpStr = "" Else If Left(TmpStr, 2) = "\\" Then TmpStr = Mid(TmpStr, 3) FrmMain.List_ComputerName.AddItem TmpStr TmpStr = "" Else TmpStr = "" End If End If
End If
End IfNext IEnd Sub
night_cai(菜烟虫)如果是已连接的机器,上面的代码就可以吗?参数该怎样变化。
night_cai(菜烟虫),首先非常感谢你!但运行之后,在combo1显示不出工作组 显示:Q Microsoft Windows n d o ... 而且在list里没有任何信息。 我知道这离成功只差一步,还希望你能关注,帮我解决,谢谢!
Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As LongPrivate Type NETRESOURCE
dwScope As Long
dwType As Long
dwDisplayType As Long
dwUsage As Long
lpLocalName As String
lpRemoteName As String
lpComment As String
lpProvider As String
End TypePrivate Const RESOURCE_GLOBALNET = &H2& '用在WNetOpenEnum中的第一个参数,表示要枚举所有网络资源(包括已连接的和未连接的)
Private Const RESOURCETYPE_ANY = &H0 '用在WNetOpenEnum中的第二个参数,表示要枚举所有资源(包括磁盘和打印机)
Private Const RESOURCETYPE_DISK = &H1 '用在WNetOpenEnum中的第二个参数,表示要枚举所有磁盘(文件夹)资源
Private Const RESOURCETYPE_PRINT = &H2 '用在WNetOpenEnum中的第二个参数,表示要枚举所有打印设备资源Public Function EnumDomain() As Boolean
Dim NetS As NETRESOURCE
Dim MaxDomain As Integer
Dim Buf(1024) As Byte
Dim TmpReturn As Long
Dim TmpStr As String
Dim hEnumReturn As Long
Dim I As Integer
TmpReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetS, hEnumReturn)
If TmpReturn <> 0 Then '如果失败是话,退出函数
EnumDomain = False
Exit Function
End IfTmpReturn = WNetEnumResource(hEnumReturn, -1, Buf(0), 1024) 'hEnmReturn是上面的语句得到的句柄
Call WNetCloseEnum(hEnumReturn) 'hEnmReturn是上面的语句得到的句柄
If TmpReturn <> 0 Then '如果失败是话,退出函数
EnumDomain = False
Exit Function
End IfFor I = 1 To 1023 '处理缓冲区的数据
'前面的200个字节是没有用的
If Buf(I) <> "0" And Buf(I) <> Space(0) Then
TmpStr = TmpStr & Chr(Val(Buf(I)))
Else
If TmpStr <> "" Then
If Trim(TmpStr) = "Microsoft Network" Then
TmpStr = ""
Else
FrmMain.Combo_WorkGroup.AddItem TmpStr
FrmMain.Combo_WorkGroup.Text = TmpStr
TmpStr = ""
End If
End If
End IfNext I
EnumDomain = TrueEnd FunctionPrivate Sub CmdListWorkGroup_Click()
FrmMain.Combo_WorkGroup.Clear
EnumDomain
If EnumDomain = False Then MsgBox "取得工作组失败!"
End SubPublic Sub Combo_WorkGroup_Click()
Me.List_ComputerName.Clear
Dim NetS As NETRESOURCE
'Dim MaxDomain As Integer
Dim Buf(1024) As Byte
Dim TmpReturn As Long
Dim TmpStr As String
Dim hEnumReturn As Long
Dim I As Integer
NetS.lpRemoteName = FrmMain.Combo_WorkGroup.Text
TmpReturn = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NetS, hEnumReturn)
If TmpReturn <> 0 Then '如果失败是话,退出函数
' EnumDomain = False
Exit Sub
End IfTmpReturn = WNetEnumResource(hEnumReturn, -1, Buf(0), 1024)
If TmpReturn <> 0 Then '如果失败是话,退出函数
' EnumDomain = False
Exit Sub
End IfCall WNetCloseEnum(hEnumReturn)For I = 200 To 1023 '处理缓冲区的数据
If Buf(I) <> "0" Then
TmpStr = TmpStr & Chr(Val(Buf(I)))
Else
If TmpStr <> "" Then
If Trim(TmpStr) = "Microsoft Network" Then
TmpStr = ""
Else
If Left(TmpStr, 2) = "\\" Then
TmpStr = Mid(TmpStr, 3)
FrmMain.List_ComputerName.AddItem TmpStr
TmpStr = ""
Else
TmpStr = ""
End If End If
End If
End IfNext IEnd Sub
显示:Q
Microsoft Windows
n
d
o
...
而且在list里没有任何信息。
我知道这离成功只差一步,还希望你能关注,帮我解决,谢谢!