VBADS.BAS
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. Attribute VB_Name = "Module1"
  2. ' DSBROWSE
  3. ' This is a simple browser for Active Directory which demonstrates
  4. ' the use of the basic Active Directory Automation interfaces from
  5. ' VB. Browsing starts automatically at the Namespaces
  6. ' Collection Object. The user can expand the browser tree
  7. ' to any level desired. The properties option allows viewing
  8. ' of the current Active Directory object's properties, while the Set
  9. ' button allows changing property values.
  10. Option Explicit
  11. Public currentADsObj As IADs
  12. Public currentADsObjCont As IADsContainer
  13. Public currentADsObjSchema   As IADs
  14. Public currentNewObj   As IADs
  15. Public strPath As String
  16. Public bStartup As Boolean
  17. Public errstring As String
  18. Public ERRNUMB As Long
  19. Public bAbort As Boolean
  20. Public Sub enumerate_path(ByVal Node As Node)
  21. '
  22. 'Name: enumerate_path
  23. 'Input: Node As Node
  24. 'Desc: Does the actual enumerating of input node.
  25. '   All child object are enumerated and placed under
  26. '   the input node as children.
  27. 'Return: none
  28. '
  29.     
  30.     '
  31.     ' Set Error handler
  32.     '
  33.     On Error GoTo ErrorHandler
  34.     
  35.     Dim st As Variant
  36.     Dim nodX As Node    ' Create variable.
  37.     Dim ChildNode As Node    ' Create variable.
  38.     Dim I As Integer    ' Create a counter variable.
  39.     Dim Container As IADsContainer
  40.     Dim Class As IADsClass
  41.     Dim Child As IADs
  42.     Dim classobj As IADsClass
  43.     Dim tempClass As String
  44.     
  45.     bAbort = False
  46.     '
  47.     ' Get the object selected
  48.     '
  49.     Set currentADsObj = GetObject(strPath)
  50.     frmBrwsTree.txtName.Caption = currentADsObj.Name
  51.     frmBrwsTree.txtPath.Caption = currentADsObj.ADsPath
  52.     On Error Resume Next
  53.     '
  54.     ' Set the node if not passed into this sub as the current
  55.     ' node we are working on (for the collection coming up).
  56.     '
  57.     If Node Is Nothing Then
  58.        Set Node = frmBrwsTree.TreeView1.Nodes.Item(currentADsObj.ADsPath)
  59.        Node.Sorted = True
  60.     End If
  61.     On Error GoTo ErrorHandler
  62.     
  63.     If frmBrwsTree.TreeView1.Nodes.Count = 0 Then
  64.         '
  65.         ' This means we are enumerating the namespaces container
  66.         ' No nodes expanded yet,
  67.         '
  68.         tempClass = SetClass(currentADsObj.Class)
  69.         Set nodX = frmBrwsTree.TreeView1.Nodes.Add(, , currentADsObj.ADsPath, _
  70.             currentADsObj.Name, tempClass)
  71.         nodX.Sorted = True
  72.         '
  73.         'Get namespace IDs
  74.         '
  75.         Set Container = currentADsObj
  76.         For Each Child In Container
  77.             tempClass = SetClass(Child.Class)
  78.             Set Node = frmBrwsTree.TreeView1.Nodes.Add(nodX, tvwChild, _
  79.                 Child.ADsPath, Child.Name, tempClass)
  80.             Node.Sorted = True
  81.             '
  82.             ' If the child is a container, then add a temporary nod
  83.             ' to show that it can be expanded later.
  84.             '
  85.             Set ChildNode = frmBrwsTree.TreeView1.Nodes.Add(Node, _
  86.                 tvwChild, Child.ADsPath & "/Dummy", "Dummy", tempClass)
  87.             ChildNode.Sorted = True
  88.         Next Child
  89.         bStartup = True 'disable expand processing
  90.         frmBrwsTree.TreeView1.Nodes(1).Expanded = True
  91.         bStartup = False
  92.         Set Node = Nothing
  93.     
  94.     Else
  95.     
  96.         Set Container = Nothing
  97.         Node.Sorted = True
  98.         '
  99.         ' Now, see if it's a container and if so, enumerate
  100.         ' all objects below it.
  101.         '
  102.         On Error Resume Next
  103.     
  104.         Set Container = currentADsObj
  105.         If Err = 0 Then
  106.             For Each Child In Container
  107.                 If Child Is Nothing Then Exit For
  108.                 Err = 0
  109.                 I = I + 1
  110.                 '
  111.                 ' Every 80 objects we check for user input
  112.                 '
  113.                 If I = 80 Then
  114.                     DoEvents
  115.                     If bAbort Then GoTo quitloop
  116.                     I = 0
  117.                 End If
  118.                 tempClass = SetClass(Child.Class) 'Gets the image
  119.                 If tempClass = "" Then tempClass = "Dummy"
  120.                
  121.                 Set nodX = frmBrwsTree.TreeView1.Nodes.Add(Node, tvwChild, _
  122.                     Child.ADsPath, Child.Name, tempClass)
  123.                 nodX.Sorted = True
  124.                 '
  125.                 ' If New node is a container then add temporary child node
  126.                 '
  127.                 If IsContainer(Child) Then
  128.                       
  129.                     Set ChildNode = frmBrwsTree.TreeView1.Nodes.Add(nodX, _
  130.                         tvwChild, Child.ADsPath & "Dummy", "Dummy", tempClass)
  131.                     ChildNode.Sorted = True
  132.                 End If
  133. skip:
  134.            Next Child
  135.         End If
  136.         
  137. quitloop:
  138.         Set currentADsObj = Nothing
  139. skip2:
  140.     End If
  141.     GoTo finish
  142.     
  143. ErrorHandler:
  144.     
  145.         errstring = "Had an error:" & Err.Number
  146.         ERRNUMB = Err.Number
  147.         MsgBox errstring
  148.         Resume Next
  149. finish:
  150. End Sub
  151. Public Function SetClass(classString As String) As String
  152. 'Name: SetClass
  153. 'Input: classString As String
  154. 'Desc: Used to determine what classname is
  155. '   used for the imagelist
  156. 'Return: SetClass As String
  157.     SetClass = "img" & classString
  158.     
  159.     '
  160.     ' Evaluate input class to set image to all classes
  161.     '
  162.     Select Case classString
  163.     
  164.     Case "Computer"
  165.     Case "NameSpace"
  166.     Case "Namespaces"
  167.     Case "User"
  168.     Case "Domain"
  169.     Case "Service"
  170.     Case "Group"
  171.     Case "PrintQueue"
  172.     Case "FileShare"
  173.     Case "Organization"
  174.     Case "Country"
  175.     Case "Organizational Unit"
  176.         SetClass = "imgOrganization"
  177.     ' Here we set all others
  178.     Case Else
  179.         SetClass = "imgDefault"
  180.     End Select
  181. End Function
  182. Public Function IsContainer(objADS As IADs) As Boolean
  183. '
  184. ' This Function returns True or False depending on whether the
  185. ' object referred to by objADs is a container or not
  186. '
  187.     Dim Cont As IADsContainer
  188.     
  189.     On Error Resume Next
  190.     
  191.     Set Cont = objADS
  192.     If Err Then
  193.         IsContainer = False
  194.     Else
  195.         IsContainer = True
  196.     End If
  197. End Function