Определение компьютеров в сети - VB

Узнай цену своей работы

Формулировка задачи:

Люди, подскажите пожалуйста как программно определить список компьютеров, которые сейчас в сети.

Решение задачи: «Определение компьютеров в сети»

textual
Листинг программы
Const MAX_RESOURCES = 256
Const NOT_A_CONTAINER = -1
 
Function StringFromPtr(Ptr As Long) As String
Dim lLength As Long
 
    lLength = lstrlen(Ptr)
    StringFromPtr = Space$(lLength)
    CopyMem ByVal StringFromPtr, ByVal Ptr, lLength
End Function
 
Public Sub EnumNetworks()
Dim lRet As Long
Dim hEnum As Long
Dim lCount As Long
Dim Ind As Long
Dim lBufferSize As Long
Dim uNet(0 To MAX_RESOURCES - 1) As NETRESOURCE
 
    lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
    If lRet = NO_ERROR Then
        lCount = RESOURCE_ENUM_ALL
        Do
            lBufferSize = Len(uNet(0)) * MAX_RESOURCES
            lRet = WNetEnumResource(hEnum, lCount, uNet(0), lBufferSize)
            If lCount > 0 Then
                For Ind = 0 To lCount - 1
                    If uNet(Ind).dwDisplayType = RESOURCEDISPLAYTYPE_NETWORK Then
                        frmMain.lblNetwork = StringFromPtr(uNet(Ind).pRemoteName)
                        DoEvents
                        EnumDomains uNet(Ind)
                    End If
                Next Ind
            End If
        Loop While lRet = ERROR_MORE_DATA
    End If
    
    If hEnum Then WNetCloseEnum hEnum
End Sub
 
Private Sub EnumDomains(ByRef Parent As NETRESOURCE)
Dim lRet As Long
Dim hEnum As Long
Dim lCount As Long
Dim Ind As Long
Dim lBufferSize As Long
Dim uNet(0 To MAX_RESOURCES - 1) As NETRESOURCE
 
    lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_ALL, Parent, hEnum)
    If lRet = NO_ERROR Then
        lCount = RESOURCE_ENUM_ALL
        Do
            lBufferSize = Len(uNet(0)) * MAX_RESOURCES
            lRet = WNetEnumResource(hEnum, lCount, uNet(0), lBufferSize)
            If lCount > 0 Then
                For Ind = 0 To lCount - 1
                    If uNet(Ind).dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN Then
                        frmMain.lblDomain = StringFromPtr(uNet(Ind).pRemoteName)
                        DoEvents
                        EnumServers uNet(Ind)
                    End If
                Next Ind
            End If
        Loop While lRet = ERROR_MORE_DATA
    End If
    
    If hEnum Then WNetCloseEnum hEnum
End Sub
 
Private Sub EnumServers(ByRef Parent As NETRESOURCE)
Dim lRet As Long
Dim hEnum As Long
Dim lCount As Long
Dim Ind As Long
Dim lBufferSize As Long
Dim uNet(0 To MAX_RESOURCES - 1) As NETRESOURCE
 
Dim Srv As String
 
    lRet = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, RESOURCEUSAGE_ALL, Parent, hEnum)
    If lRet = NO_ERROR Then
        lCount = RESOURCE_ENUM_ALL
        Do
            lBufferSize = Len(uNet(0)) * MAX_RESOURCES
            lRet = WNetEnumResource(hEnum, lCount, uNet(0), lBufferSize)
            If lCount > 0 Then
                For Ind = 0 To lCount - 1
                    If uNet(Ind).dwDisplayType = RESOURCEDISPLAYTYPE_SERVER Then
                        Srv = StringFromPtr(uNet(Ind).pRemoteName)
                        frmMain.lblServer = Srv
                        DoEvents
                        <... тут код по обработке компьютера Srv ...>
                    End If
                Next Ind
            End If
        Loop While lRet = ERROR_MORE_DATA
    End If
    
    If hEnum Then WNetCloseEnum hEnum
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы