用vb6.0如何获取局域内所以的电脑名称及IP地址的代码及详解.在此感谢!最好是越详细越好.

解决方案 »

  1.   

    还有一个小小问题:我举一例子
        我已知窗体名为"form1",而想根据窗体名"from1"操作此窗体,该如果把窗体名这个string型转换成可以对象型呢?
      

  2.   

    有更详细点的吗??我对api不甚了解..
      

  3.   

    Ctrl+T 加个Winsock控件
    Me.Caption = Winsock1.LocalIP & Winsock1.LocalHostName
      

  4.   

    用winsok使用的ip地址需要用户事先知道。我认为用windows api方式可行,去查一下帮助文档吧
      

  5.   

    据jhone99提供的代码:WNetOpenEnum(resource_globalnet, resourcetype_any, 0&, ByVal 0&, henum)
    提示 byval 0&用户类型不能用,为何?
      

  6.   

    Private 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
    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 
      

  7.   

    以下是我结对上jhone99修改后的代码,不知道是对还是错,我还没有测试,望大家看看,有没有异常和错误
    Option Explicit
    Private Const resource_connected As Long = &H1&
    Private Const resource_globalnet As Long = &H2&
    Private Const resource_remembered As Long = &H3&
    Private Const resourcedisplaytype_directory& = &H9
    Private Const resourcedisplaytype_domain& = &H1
    Private Const resourcedisplaytype_file& = &H4
    Private Const resourcedisplaytype_generic& = &H0
    Private Const resourcedisplaytype_group& = &H5
    Private Const resourcedisplaytype_network& = &H6
    Private Const resourcedisplaytype_root& = &H7
    Private Const resourcedisplaytype_server& = &H2
    Private Const resourcedisplaytype_share& = &H3
    Private Const resourcedisplaytype_shareadmin& = &H8
    Private Const resourcetype_any As Long = &H0&
    Private Const resourcetype_disk As Long = &H1&
    Private Const resourcetype_print As Long = &H2&
    Private Const resourcetype_unknown As Long = &HFFFF&
    Private Const resourceusage_all As Long = &H0&
    Private Const resourceusage_connectable As Long = &H1&
    Private Const resourceusage_container As Long = &H2&
    Private Const resourceusage_reserved As Long = &H80000000
    Private Const no_error = 0
    Private Const error_more_data = 234 'l // dderror
    Private Const resource_enum_all As Long = &HFFFFPrivate Type Netresource
           dwScope As Long
           dwType As Long
           dwdisplaytype As Long
           dwUsage As Long
           plocalname As Long
           premotename As Long
           pcomment As Long
           pprovider As Long
    End TypePrivate Type Netresource_BUf
            dwScope As Long
            dwType As Long
            dwdisplaytype As Long
            dwUsage As Long
            slocalname As String
            sremotename As String
            scomment As String
            sprovider As String
    End TypePrivate Declare Function WNetAddConnection Lib "mpr.dll" Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, ByVal lpszPassword As String, ByVal lpszLocalName As String) As Long
    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 Long
    Private Declare Function ValidateRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long) As Long
    Private Declare Sub copymem Lib "kernel32" Alias "rtlmovememory" (lpto As Any, lpfrom As Any, ByVal llen As Long)
    Private Declare Sub copymembyptr Lib "kernel32" Alias "rtlmovememory" (ByVal lpto As Long, ByVal lpfrom As Long, ByVal llen As Long)
    Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpya" (ByVal lpstring1 As String, ByVal lpstring2 As Any) As Long
    Private Declare Function lstrlen Lib "kernel32" Alias "lstrlena" (ByVal lpstring As Any) As Long
    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
    Dim uNet() As Netresource_BUf
    bFirstTime = TrueDo
      If bFirstTime Then
         lReturn = WNetOpenEnum(resource_globalnet, resourcetype_any, resourceusage_all, uNetApi(0), hEnum)
         bFirstTime = False
         Else
             If uNet(lLastIndex).dwUsage And resourceusage_container Then
                lReturn = WNetOpenEnum(resource_globalnet, resourcetype_any, resourceusage_all, uNetApi(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_BUf   '以前是netresourece
             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