請高手指教.謝謝!

解决方案 »

  1.   


                res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, NR, hEnum)
                If res = 0 Then
                    lpBuff = GlobalAlloc(GPTR, cbBuff)
                    cCount = &HFFFFFFFF
                    res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff)
                    If res = 0 Then
                        p = lpBuff
                        For i = 1 To cCount
                            CopyMemory NR, ByVal p, LenB(NR)
                            Set nodX = TreeView1.Nodes.Add("R", tvwChild, PointerToString(NR.lpRemoteName), "")
                            nodX.Text = PointerToString(NR.lpRemoteName)
                            nodX.Image = 2
                            'List1.AddItem PointerToString(NR.lpRemoteName)
                            p = p + LenB(NR)
                        Next i
                    End If
                End If
                WNetCloseEnum (hEnum)
      

  2.   

    zqfleaf(动力港湾) :老兄不行呀
    能否貼上詳細的過程呀.
    還有在下面兩句中:
    lpBuff = GlobalAlloc(GPTR, cbBuff)
    res = WNetEnumResource(hEnum, cCount, lpBuff, cbBuff)lpBuff 的類型該定義成LONG 呢 還是 NETRESOURCE 呢
      

  3.   

    这个是两千的例子,98下可能有点区别,但是用上面三个API是可以的。
    WNetOpenEnum
    WNetEnumResource
    WNetCloseEnum '==========================把下面放在一个模块中========================
    Option ExplicitPublic Type NETRESOURCE
       dwScope As Long
       dwType As Long
       dwDisplayType As Long
       dwUsage As Long
       lpLocalName As Long
       lpRemoteName As Long
       lpComment As Long
       lpProvider As Long
    End TypePublic Type NETRES2
        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 TypePublic 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 LongPublic Declare Function WNetEnumResource Lib "mpr.dll" Alias _
      "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, _
      ByVal lpBuffer As Long, lpBufferSize As Long) As LongPublic Declare Function WNetCloseEnum Lib "mpr.dll" _
       (ByVal hEnum As Long) As LongPublic Const RESOURCE_CONNECTED = &H1
    Public Const RESOURCE_GLOBALNET = &H2
    Public Const RESOURCE_REMEMBERED = &H3Public Const RESOURCETYPE_ANY = &H0
    Public Const RESOURCETYPE_DISK = &H1
    Public Const RESOURCETYPE_PRINT = &H2
    Public Const RESOURCETYPE_UNKNOWN = &HFFFFPublic Const RESOURCEUSAGE_CONNECTABLE = &H1
    Public Const RESOURCEUSAGE_CONTAINER = &H2
    Public Const RESOURCEUSAGE_RESERVED = &H80000000Public Const GMEM_FIXED = &H0
    Public Const GMEM_ZEROINIT = &H40
    Public Const GPTR = (GMEM_FIXED Or GMEM_ZEROINIT)Public Declare Function GlobalAlloc Lib "KERNEL32" _
      (ByVal wFlags As Long, ByVal dwBytes As Long) As LongPublic Declare Function GlobalFree Lib "KERNEL32" _
      (ByVal hMem As Long) As LongPublic Declare Sub CopyMemory Lib "KERNEL32" Alias _
      "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, _
       ByVal cbCopy As Long)
       
    Public Declare Function CopyPointer2String Lib _
      "KERNEL32" Alias "lstrcpyA" (ByVal NewString As _
      String, ByVal OldString As Long) As Long
      

  4.   

    zqfleaf(动力港湾) ;謝謝你! 
    其實在WINDOWS2000下我也知道一個更簡單的.只需要引用 Active DS Type Library(activeds.tlb) 就可以,下面是例子:Private Function ValidateUser(ByVal DomainName As String, ByVal User As String, ByVal Pws As String) As Boolean
        Dim LDAP_DSO As IADsOpenDSObject
        Dim LDAP_Ctnr As IADsContainer
        Dim LDAP_Grp As IADsGroup
        Dim LDAP_US As IADsUser
        On Error Resume Next
        
        Set LDAP_DSO = GetObject("LDAP:")
        
        Set LDAP_Ctnr = LDAP_DSO.OpenDSObject("LDAP://" & DomainName & "/CN=Users,DC=" & DomainName & ",DC=COM", User, Pws, ADS_SECURE_AUTHENTICATION)
        If Err.Number <> 0 And Err.Number <> -2147016646 Then
           MsgBox CStr(Err.Number) & Err.Description, vbOKOnly + vbExclamation
           ValidateUser = False
        Else
           ValidateUser = True
           
           Set LDAP_Ctnr = GetObject("WinNT://" & DomainName)
                
           LDAP_Ctnr.Filter = Array("User")
                  
           For Each LDAP_US In LDAP_Ctnr
               If UCase(LDAP_US.name) = UCase(User) Then
                  UserDisplayName = LDAP_US.FullName
                  For Each LDAP_Grp In LDAP_US.Groups
                     UserByGroup = UserByGroup & " " & LDAP_Grp.name
                  Next
                  Exit For
               End If
           Next       
           
        End If
        
        Set LDAP_Ctnr = Nothing
        Set LDAP_DSO = Nothing
        
        On Error GoTo 0
      

  5.   

    zqfleaf(动力港湾): 有空能否幫忙看看下面這個問題.
    http://expert.csdn.net/Expert/topic/1791/1791361.xml?temp=.3601496
      

  6.   

    我也想问问,刚才我也正在想如何来解决这个问题:
    如何搜索网络中的所有域、工作组、计算机名(最好含IP和MAC地址)、所有共享资源等信息;要求象Windows中的网上邻居一个来组织(即在结构树中进行分层显示),现在,我知道怎样来获取这域、工作组、计算机、共享资源,但无法按网上邻居的网络资源来组织。
      

  7.   

    tgliu(TinguiLiu):謝謝你的參與.我想請問:按网上邻居的网络资源来组织? 能說具體一點嗎?
      

  8.   

    就是将相同工作组的计算机放在一起;域
    --工作组1             '工作组名
    ------计算机11        '计算机名
    ------计算机11\MP3    '共享名
    ------计算机11\Music  '共享名------计算机12
    .............
    ------计算机1n
    --工作组2
    ------计算机21
    ------计算机22
    .............
    ------计算机2n
    ..........
      

  9.   

    就是象Windows 9x  or Windows2000 里的网上邻居的管理方式来显示这些资源。
      

  10.   

    fense2002():你好.請問你回複的是誰的問題是tgliu(TinguiLiu)的還是 redliu(二軒)的.
    "那段代码" 指的是哪段呢?