'*****作者:小聪明 [email protected] '*****作者主页:http://coolzm.533.net http://go.163.com/~coolzm '*****如要转载请保留所有注释信息***** 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 '***函数说明:WNetOpenEnum '功能:启动对网络资源进行枚举的过程。这个函数会返回由WNetEnumResource函数用于枚举资源所用的一个句柄 '参数 类型 说明 'dwScope Long 指定要枚举的资源范围。可设为下述常数之一: ' RESOURCE_CONNECTED 枚举已连接的资源(忽略dwUsage) ' RESOURCE_GLOBALNET 枚举所有资源 ' RESOURCE_REMEMBERED 只枚举永久性连接 'dwType Long 下述常数之一 ' RESOURCE_ANY 枚举所有类型的网络资源 ' RESOURCE_DISK 枚举磁盘资源 ' RESOURCE_PRINT 枚举打印资源 'dwUsage Long 可设为零,表示枚举所有资源;或设为下述常数的一个或两个: ' RESOURCEUSAGE_CONNECTABLE 只枚举那些能够连接的资源 ' RESOURCEUSAGE_CONTAINER 只枚举包含了其他资源的资源 'lpNetResource NETRESOURCE 这个结构指定了一个容器资源。该函数会枚举包含于这里指定的某个指定资源内的资源。如设为NULL(把声明变成ByVal As Long),那么函数会枚举顶级网络资源。倘若在dwScope参数里没有指定RESOURCE_GLOBALNET,那么必须为NULL 'lphEnum Long 指定一个变量,用于装载一个枚举句柄。该句柄由WNetEnumResource函数使用。必须用WNetCloseEnum函数将其清除 '返回值 类型为Long 零表示成功 Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long '***函数说明:WNetEnumResource '功能:对网络资源进行枚举,需要WNetOpenEnum传递过来的参数 '参数 类型 说明 'hEnum Long 从WNetOpenEnum函数返回的一个句柄 'lpcCount Long 最初设为要枚举的最大资源数量;或设为-1,表示枚举尽可能多的资源。一旦返回,就会设为实际枚举的资源数量 ' 注意:此参数在此次操作结束后将自动设置为枚举的资源的数量,下面用到此项功能 'lpBuffer Any 通常是一个字节缓冲区的首字节。该缓冲区装载了枚举信息(可按引用声明为Byte) 'lpBufferSize Long 以字节为单位指定lpBuffer数组的长度。如缓冲区不够大,则设为需要的缓冲区长度 ' 我在后面的应用中都将此参数设为1024,这样可能在某些时候(例如域或计算机有很多)会丢失一些数据,这里我偷一个小懒,让大家自己解决吧 '返回值 类型为Long 零表示成功 Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long '***函数说明:WNetCloseEnum '功能:结束枚举操作,需要WNetOpenEnum传递过来的参数 '参数 类型 说明 'hEnum Long 从WNetOpenEnum函数返回的一个句柄 '返回值 类型为Long 零表示成功 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 Type Public Const RESOURCE_GLOBALNET As Long = &H2& '用在WNetOpenEnum中的第一个参数,表示要枚举所有网络资源(包括已连接的和未连接的) Public Const RESOURCETYPE_ANY = &H0 '用在WNetOpenEnum中的第二个参数,表示要枚举所有资源(包括磁盘和打印机) Public Const RESOURCETYPE_DISK = &H1 '用在WNetOpenEnum中的第二个参数,表示要枚举所有磁盘(文件夹)资源 Public Const RESOURCETYPE_PRINT = &H2 '用在WNetOpenEnum中的第二个参数,表示要枚举所有打印设备资源 Public domainArr() As String '域(Domain)名数组 Public numOfDomain As Integer '域(Domain)的个数 Public comArr() As String '计算机名数组 Public maxNumOfCom As Integer '某个域中计算机的最大数目 Public folderArr() As String '共享文件夹数组 Public maxNumOfFolder As Integer '某个计算机中文件夹的最大数目 Public printArr() As String '打印机数组 '**枚举网络资源中所有的域(Domain)** 所有的域名放到数组domainArr中 Public Function enumDomain() As Boolean Dim ret1 As Long Dim ret2 As Long Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄 Dim maxNum As Long Dim netRes As NETRESOURCE Dim netByte(1024) As Byte Dim tmpStr As String Dim iCount As Integer iCount = 0 maxNum = -1 '此处WNetOpenEnum中第四个参数netRes为空,表示枚举顶级资源,也就是域(Domain) ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, netRes, hEnum) If ret1 <> 0 Then enumDomain = False Exit Function End If '将枚举的数据读入缓冲区 '注意:读到缓冲区内的数据是真实数据的ASCII码,应当用Chr函数进行转换,注意下面汉字的处理 ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024) If ret1 <> 0 Then enumDomain = False Exit Function End If Call WNetCloseEnum(hEnum) '对缓冲区内的数据进行处理: For i = 200 To 1023 '头200个字节是些无用的字符(我不知道这些字符是做什么用的) If netByte(i) = "0" Then If tmpStr <> "" Then If tmpStr <> "Microsoft Network" Then '缓冲区中会有“Microsoft Network”字样,没有用,去掉 ReDim Preserve domainArr(iCount + 1) As String '定义动态数组 domainArr(iCount) = tmpStr iCount = iCount + 1 End If End If tmpStr = "" Else If Val(netByte(i)) > 122 Then '域名是中文时 '注意:汉字在缓冲区内占两个字节,用如下的形式表示: ' 例如: 张 213 197 tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1))) i = i + 1 '汉字是双字节 Else tmpStr = tmpStr & Chr(Val(netByte(i))) End If End If Next i numOfDomain = maxNum ReDim Preserve comArr(numOfDomain, 1) As String enumDomain = True End Function '****枚举所有的计算机***** Public Function enumAllComputer() As Boolean Dim i As Integer For i = 0 To numOfDomain - 1 If enumComputer(i) = False Then enumAllComputer = False Exit Function End If Next i enumAllComputer = True End Function'****枚举某个域中所有的计算机***** Public Function enumComputer(indexOfDomain As Integer) As Boolean Dim ret1 As Long Dim ret2 As Long Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄 Dim maxNum As Long Dim netRes As NETRESOURCE Dim tmpStr As String Dim iCount As Integer maxNum = -1 Dim netByte(1024) As Byte '要枚举某个域中的计算机,需要将参数netRes的属性lpRemoteName设为域的名称 netRes.lpRemoteName = domainArr(indexOfDomain) ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, netRes, hEnum) DoEvents If ret1 <> 0 Then enumComputer = False Exit Function End If ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024) DoEvents If maxNum > maxNumOfCom Then maxNumOfCom = maxNum ReDim Preserve comArr(numOfDomain, maxNumOfCom) As String End If If ret1 <> 0 Then enumComputer = False Exit Function End If Call WNetCloseEnum(hEnum) iCount = 0 For i = 200 To 1024 If netByte(i) = "0" Then If tmpStr <> "" Then If tmpStr <> "Microsoft Network" Then If Left(tmpStr, 2) = "\\" Then comArr(indexOfDomain, iCount) = Right(tmpStr, Len(tmpStr) - 2) ' iCount = iCount + 1 End If End If End If tmpStr = "" Else If Val(netByte(i)) > 122 Then '计算机名是中文时 tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1))) i = i + 1 '汉字是双字节 Else tmpStr = tmpStr & Chr(Val(netByte(i))) End If End If Next i enumComputer = True End Function
'****枚举某个计算机中所有的文件夹和打印机***** Public Function enumAllRes() As Boolean Dim i As Integer Dim j As Integer For i = 0 To numOfDomain For j = 0 To maxNumOfCom If comArr(i, j) <> "" Then If enumFolder(i, j) = False Then enumAllRes = False Exit Function End If If enumPrinter(i, j) = False Then enumAllRes = False Exit Function End If End If Next j Next i enumAllRes = True End Function '****枚举某个计算机中所有的文件夹***** Public Function enumFolder(indexOfDomain As Integer, indexOfCom As Integer) As Boolean Dim ret1 As Long Dim ret2 As Long Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄 Dim maxNum As Long Dim netRes As NETRESOURCE Dim tmpStr As String Dim iCount As Integer maxNum = -1 Dim netByte(1024) As Byte netRes.lpRemoteName = "\\" & comArr(indexOfDomain, indexOfCom) ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, netRes, hEnum) DoEvents If ret1 <> 0 Then enumFolder = False Exit Function End If ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024) DoEvents If maxNum > maxNumOfFolder Then maxNumOfFolder = maxNum ReDim Preserve folderArr(numOfDomain, maxNumOfCom, maxNumOfFolder) As String End If If ret1 <> 0 Then enumFolder = False Exit Function End If Call WNetCloseEnum(hEnum)iCount = 0 For i = 200 To 1024 If netByte(i) = "0" Then If tmpStr <> "" Then If tmpStr <> "Microsoft Network" Then If Left(tmpStr, Len(comArr(indexOfDomain, indexOfCom)) + 2) = "\\" & comArr(indexOfDomain, indexOfCom) Then folderArr(indexOfDomain, indexOfCom, iCount) = Right(tmpStr, Len(tmpStr) - 3 - Len(comArr(indexOfDomain, indexOfCom))) iCount = iCount + 1 End If End If End If tmpStr = "" Else If Val(netByte(i)) > 122 Then '文件夹名是中文时 tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1))) i = i + 1 '汉字是双字节 Else tmpStr = tmpStr & Chr(Val(netByte(i))) End If End If Next i enumFolder = True End Function '****枚举某个计算机中所有的打印机***** Public Function enumPrinter(indexOfDomain As Integer, indexOfCom As Integer) As Boolean Dim ret1 As Long Dim ret2 As Long Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄 Dim maxNum As Long Dim netRes As NETRESOURCE Dim tmpStr As String Dim iCount As Integer maxNum = -1 Dim netByte(1024) As Byte netRes.lpRemoteName = "\\" & comArr(indexOfDomain, indexOfCom) ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_PRINT, 0, netRes, hEnum) DoEvents If ret1 <> 0 Then enumPrinter = False Exit Function End If ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024) DoEvents ReDim Preserve printArr(numOfDomain, maxNumOfCom, 1) As String '假设一个计算机只能安装一个打印机 If ret1 <> 0 Then enumPrinter = False Exit Function End If Call WNetCloseEnum(hEnum)iCount = 0 For i = 200 To 1024 If netByte(i) = "0" Then If tmpStr <> "" Then If tmpStr <> "Microsoft Network" Then printArr(indexOfDomain, indexOfCom, iCount) = Right(tmpStr, Len(tmpStr) - 3 - Len(comArr(indexOfDomain, indexOfCom))) iCount = iCount + 1 End If End If tmpStr = "" Else If Val(netByte(i)) > 122 Then '打印机名是中文时(好像没有) tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1))) i = i + 1 '汉字是双字节 Else tmpStr = tmpStr & Chr(Val(netByte(i))) End If End If Next i enumPrinter = True End Function
'*****作者主页:http://coolzm.533.net http://go.163.com/~coolzm
'*****如要转载请保留所有注释信息*****
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
'***函数说明:WNetOpenEnum
'功能:启动对网络资源进行枚举的过程。这个函数会返回由WNetEnumResource函数用于枚举资源所用的一个句柄
'参数 类型 说明
'dwScope Long 指定要枚举的资源范围。可设为下述常数之一:
' RESOURCE_CONNECTED 枚举已连接的资源(忽略dwUsage)
' RESOURCE_GLOBALNET 枚举所有资源
' RESOURCE_REMEMBERED 只枚举永久性连接
'dwType Long 下述常数之一
' RESOURCE_ANY 枚举所有类型的网络资源
' RESOURCE_DISK 枚举磁盘资源
' RESOURCE_PRINT 枚举打印资源
'dwUsage Long 可设为零,表示枚举所有资源;或设为下述常数的一个或两个:
' RESOURCEUSAGE_CONNECTABLE 只枚举那些能够连接的资源
' RESOURCEUSAGE_CONTAINER 只枚举包含了其他资源的资源
'lpNetResource NETRESOURCE 这个结构指定了一个容器资源。该函数会枚举包含于这里指定的某个指定资源内的资源。如设为NULL(把声明变成ByVal As Long),那么函数会枚举顶级网络资源。倘若在dwScope参数里没有指定RESOURCE_GLOBALNET,那么必须为NULL
'lphEnum Long 指定一个变量,用于装载一个枚举句柄。该句柄由WNetEnumResource函数使用。必须用WNetCloseEnum函数将其清除
'返回值 类型为Long 零表示成功
Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As Any, lpBufferSize As Long) As Long
'***函数说明:WNetEnumResource
'功能:对网络资源进行枚举,需要WNetOpenEnum传递过来的参数
'参数 类型 说明
'hEnum Long 从WNetOpenEnum函数返回的一个句柄
'lpcCount Long 最初设为要枚举的最大资源数量;或设为-1,表示枚举尽可能多的资源。一旦返回,就会设为实际枚举的资源数量
' 注意:此参数在此次操作结束后将自动设置为枚举的资源的数量,下面用到此项功能
'lpBuffer Any 通常是一个字节缓冲区的首字节。该缓冲区装载了枚举信息(可按引用声明为Byte)
'lpBufferSize Long 以字节为单位指定lpBuffer数组的长度。如缓冲区不够大,则设为需要的缓冲区长度
' 我在后面的应用中都将此参数设为1024,这样可能在某些时候(例如域或计算机有很多)会丢失一些数据,这里我偷一个小懒,让大家自己解决吧
'返回值 类型为Long 零表示成功
Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
'***函数说明:WNetCloseEnum
'功能:结束枚举操作,需要WNetOpenEnum传递过来的参数
'参数 类型 说明
'hEnum Long 从WNetOpenEnum函数返回的一个句柄
'返回值 类型为Long 零表示成功
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 Type
Public Const RESOURCE_GLOBALNET As Long = &H2& '用在WNetOpenEnum中的第一个参数,表示要枚举所有网络资源(包括已连接的和未连接的)
Public Const RESOURCETYPE_ANY = &H0 '用在WNetOpenEnum中的第二个参数,表示要枚举所有资源(包括磁盘和打印机)
Public Const RESOURCETYPE_DISK = &H1 '用在WNetOpenEnum中的第二个参数,表示要枚举所有磁盘(文件夹)资源
Public Const RESOURCETYPE_PRINT = &H2 '用在WNetOpenEnum中的第二个参数,表示要枚举所有打印设备资源
Public domainArr() As String '域(Domain)名数组
Public numOfDomain As Integer '域(Domain)的个数
Public comArr() As String '计算机名数组
Public maxNumOfCom As Integer '某个域中计算机的最大数目
Public folderArr() As String '共享文件夹数组
Public maxNumOfFolder As Integer '某个计算机中文件夹的最大数目
Public printArr() As String '打印机数组
'**枚举网络资源中所有的域(Domain)** 所有的域名放到数组domainArr中
Public Function enumDomain() As Boolean
Dim ret1 As Long
Dim ret2 As Long
Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄
Dim maxNum As Long
Dim netRes As NETRESOURCE
Dim netByte(1024) As Byte
Dim tmpStr As String
Dim iCount As Integer
iCount = 0
maxNum = -1
'此处WNetOpenEnum中第四个参数netRes为空,表示枚举顶级资源,也就是域(Domain)
ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, netRes, hEnum)
If ret1 <> 0 Then
enumDomain = False
Exit Function
End If
'将枚举的数据读入缓冲区
'注意:读到缓冲区内的数据是真实数据的ASCII码,应当用Chr函数进行转换,注意下面汉字的处理
ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024)
If ret1 <> 0 Then
enumDomain = False
Exit Function
End If
Call WNetCloseEnum(hEnum)
'对缓冲区内的数据进行处理:
For i = 200 To 1023 '头200个字节是些无用的字符(我不知道这些字符是做什么用的)
If netByte(i) = "0" Then
If tmpStr <> "" Then
If tmpStr <> "Microsoft Network" Then '缓冲区中会有“Microsoft Network”字样,没有用,去掉
ReDim Preserve domainArr(iCount + 1) As String '定义动态数组
domainArr(iCount) = tmpStr
iCount = iCount + 1
End If
End If
tmpStr = ""
Else
If Val(netByte(i)) > 122 Then '域名是中文时
'注意:汉字在缓冲区内占两个字节,用如下的形式表示:
' 例如: 张 213 197
tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1)))
i = i + 1 '汉字是双字节
Else
tmpStr = tmpStr & Chr(Val(netByte(i)))
End If
End If
Next i
numOfDomain = maxNum
ReDim Preserve comArr(numOfDomain, 1) As String
enumDomain = True
End Function
'****枚举所有的计算机*****
Public Function enumAllComputer() As Boolean
Dim i As Integer
For i = 0 To numOfDomain - 1
If enumComputer(i) = False Then
enumAllComputer = False
Exit Function
End If
Next i
enumAllComputer = True
End Function'****枚举某个域中所有的计算机*****
Public Function enumComputer(indexOfDomain As Integer) As Boolean
Dim ret1 As Long
Dim ret2 As Long
Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄
Dim maxNum As Long
Dim netRes As NETRESOURCE
Dim tmpStr As String
Dim iCount As Integer
maxNum = -1
Dim netByte(1024) As Byte
'要枚举某个域中的计算机,需要将参数netRes的属性lpRemoteName设为域的名称
netRes.lpRemoteName = domainArr(indexOfDomain)
ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, netRes, hEnum)
DoEvents
If ret1 <> 0 Then
enumComputer = False
Exit Function
End If
ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024)
DoEvents
If maxNum > maxNumOfCom Then
maxNumOfCom = maxNum
ReDim Preserve comArr(numOfDomain, maxNumOfCom) As String
End If
If ret1 <> 0 Then
enumComputer = False
Exit Function
End If
Call WNetCloseEnum(hEnum)
iCount = 0
For i = 200 To 1024
If netByte(i) = "0" Then
If tmpStr <> "" Then
If tmpStr <> "Microsoft Network" Then
If Left(tmpStr, 2) = "\\" Then
comArr(indexOfDomain, iCount) = Right(tmpStr, Len(tmpStr) - 2) '
iCount = iCount + 1
End If
End If
End If
tmpStr = ""
Else
If Val(netByte(i)) > 122 Then '计算机名是中文时
tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1)))
i = i + 1 '汉字是双字节
Else
tmpStr = tmpStr & Chr(Val(netByte(i)))
End If
End If
Next i
enumComputer = True
End Function
Public Function enumAllRes() As Boolean
Dim i As Integer
Dim j As Integer
For i = 0 To numOfDomain
For j = 0 To maxNumOfCom
If comArr(i, j) <> "" Then
If enumFolder(i, j) = False Then
enumAllRes = False
Exit Function
End If
If enumPrinter(i, j) = False Then
enumAllRes = False
Exit Function
End If
End If
Next j
Next i
enumAllRes = True
End Function
'****枚举某个计算机中所有的文件夹*****
Public Function enumFolder(indexOfDomain As Integer, indexOfCom As Integer) As Boolean
Dim ret1 As Long
Dim ret2 As Long
Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄
Dim maxNum As Long
Dim netRes As NETRESOURCE
Dim tmpStr As String
Dim iCount As Integer
maxNum = -1
Dim netByte(1024) As Byte
netRes.lpRemoteName = "\\" & comArr(indexOfDomain, indexOfCom)
ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, netRes, hEnum)
DoEvents
If ret1 <> 0 Then
enumFolder = False
Exit Function
End If
ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024)
DoEvents
If maxNum > maxNumOfFolder Then
maxNumOfFolder = maxNum
ReDim Preserve folderArr(numOfDomain, maxNumOfCom, maxNumOfFolder) As String
End If
If ret1 <> 0 Then
enumFolder = False
Exit Function
End If
Call WNetCloseEnum(hEnum)iCount = 0
For i = 200 To 1024
If netByte(i) = "0" Then
If tmpStr <> "" Then
If tmpStr <> "Microsoft Network" Then
If Left(tmpStr, Len(comArr(indexOfDomain, indexOfCom)) + 2) = "\\" & comArr(indexOfDomain, indexOfCom) Then
folderArr(indexOfDomain, indexOfCom, iCount) = Right(tmpStr, Len(tmpStr) - 3 - Len(comArr(indexOfDomain, indexOfCom)))
iCount = iCount + 1
End If
End If
End If
tmpStr = ""
Else
If Val(netByte(i)) > 122 Then '文件夹名是中文时
tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1)))
i = i + 1 '汉字是双字节
Else
tmpStr = tmpStr & Chr(Val(netByte(i)))
End If
End If
Next i
enumFolder = True
End Function
'****枚举某个计算机中所有的打印机*****
Public Function enumPrinter(indexOfDomain As Integer, indexOfCom As Integer) As Boolean
Dim ret1 As Long
Dim ret2 As Long
Dim hEnum As Long '需要从WNetOpenEnum传递给WNetEnumResource的句柄
Dim maxNum As Long
Dim netRes As NETRESOURCE
Dim tmpStr As String
Dim iCount As Integer
maxNum = -1
Dim netByte(1024) As Byte
netRes.lpRemoteName = "\\" & comArr(indexOfDomain, indexOfCom)
ret1 = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_PRINT, 0, netRes, hEnum)
DoEvents
If ret1 <> 0 Then
enumPrinter = False
Exit Function
End If
ret2 = WNetEnumResource(hEnum, maxNum, netByte(0), 1024)
DoEvents
ReDim Preserve printArr(numOfDomain, maxNumOfCom, 1) As String '假设一个计算机只能安装一个打印机
If ret1 <> 0 Then
enumPrinter = False
Exit Function
End If
Call WNetCloseEnum(hEnum)iCount = 0
For i = 200 To 1024
If netByte(i) = "0" Then
If tmpStr <> "" Then
If tmpStr <> "Microsoft Network" Then
printArr(indexOfDomain, indexOfCom, iCount) = Right(tmpStr, Len(tmpStr) - 3 - Len(comArr(indexOfDomain, indexOfCom)))
iCount = iCount + 1
End If
End If
tmpStr = ""
Else
If Val(netByte(i)) > 122 Then '打印机名是中文时(好像没有)
tmpStr = tmpStr & Chr(Val(netByte(i)) * 256 + Val(netByte(i + 1)))
i = i + 1 '汉字是双字节
Else
tmpStr = tmpStr & Chr(Val(netByte(i)))
End If
End If
Next i
enumPrinter = True
End Function
你好!
你这些都是什么时候学得呀?需要多长时间?我也想学。有什么好的学习方法和资料么?谢谢。我是天津人,[email protected] 希望能不吝指教!