VERSION 5.00 Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX" Begin VB.Form ISAdminForm Caption = "Indexing Service Admin Sample" ClientHeight = 5676 ClientLeft = 2220 ClientTop = 3036 ClientWidth = 10920 LinkTopic = "ISAdmin" MouseIcon = "ISAdmin.frx":0000 ScaleHeight = 5676 ScaleWidth = 10920 Begin MSComctlLib.ListView ListView1 Height = 4335 Left = 3480 TabIndex = 6 Top = 1200 Width = 7215 _ExtentX = 12721 _ExtentY = 7641 LabelWrap = -1 'True HideSelection = -1 'True _Version = 393217 ForeColor = -2147483640 BackColor = -2147483643 BorderStyle = 1 Appearance = 1 NumItems = 0 End Begin MSComctlLib.TreeView TreeView1 Height = 4335 Left = 120 TabIndex = 5 Top = 1200 Width = 3255 _ExtentX = 5736 _ExtentY = 7641 _Version = 393217 LabelEdit = 1 LineStyle = 1 Style = 6 Appearance = 1 End Begin VB.Timer Timer1 Left = 9840 Top = 480 End Begin VB.CommandButton StopCisvc Caption = "Stop" Height = 255 Left = 6120 TabIndex = 4 Top = 240 Width = 1095 End Begin VB.CommandButton StartCisvc Caption = "Start" Height = 255 Left = 4560 TabIndex = 3 Top = 240 Width = 1215 End Begin VB.CommandButton Connect Caption = "Connect" Height = 255 Left = 3240 TabIndex = 2 Top = 240 Width = 1095 End Begin VB.TextBox Text1 Height = 285 Left = 1680 TabIndex = 1 Text = "Local Machine" Top = 240 Width = 1335 End Begin VB.Label Label1 Caption = "Computer Name" Height = 255 Left = 240 TabIndex = 0 Top = 240 Width = 1215 End End Attribute VB_Name = "ISAdminForm" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False '+------------------------------------------------------------------------- ' ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ' ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO ' THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A ' PARTICULAR PURPOSE. ' ' Copyright 1998-1999, Microsoft Corporation. All Rights Reserved. ' ' PROGRAM: VBAdmin ' ' PURPOSE: Illustrates how to administer Indexing Service ' using Visual Basic and the Admin Helper API. ' ' PLATFORM: Windows 2000 ' '-------------------------------------------------------------------------- Option Explicit ' Global variables. Public gCiAdmin As Object Public gfRightPressed As Boolean Public gfLVRightMouse As Boolean ' Module level variables. Dim AdminScopesPage As AdminScopes Dim CatalogConfigPage As AdminCatalog Dim AddCatalogPage As AddCatalog Dim mNode As Node ' Node index. Dim mtcIndex ' tree control index. Dim mTVNodeCount As Integer Dim blnScopesExpanded As Boolean Private UpCount As Integer ' Resize variables. Private InitialWidth As Integer Private InitialHeight As Integer Private FormWidth As Integer Private FormHeight As Integer Private NonListViewWidth As Integer Private NonListViewHeight As Integer Private NonTreeViewHeight As Integer ' Win32 API used. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub Connect_Click() On Error GoTo ErrorHandler Connect.Enabled = False Set gCiAdmin = Nothing ' Create Indexing Service Admin object. Set gCiAdmin = CreateObject("Microsoft.ISAdm") ' Set MachineName to administer IS, if not local. If Text1.Text <> "Local Machine" Then gCiAdmin.MachineName = Text1.Text End If If (gCiAdmin.IsRunning) Then StopCisvc.Enabled = True StartCisvc.Enabled = False Else StopCisvc.Enabled = False StartCisvc.Enabled = True End If ListView1.ListItems.Clear TreeView1.Nodes.Clear ' Configure TreeView. TreeView1.Sorted = True Set mNode = TreeView1.Nodes.Add() mNode.Text = "Catalogs" TreeView1.LabelEdit = 1 TreeView1.Style = tvwPlusMinusText ' Configure ListView. ListView1.View = lvwReport Call PopulateCatalogTreeView Call MakeCatalogColumns ErrorHandler: If (Err.Number) Then MsgBox (Err.Description) Text1.Text = "Local Machine" End If Connect.Enabled = True End Sub Private Sub Form_Load() On Error GoTo ErrorHandler Timer1.Enabled = False Timer1.Interval = 5000 ' 5 second refresh rate for catalog properties. ' Initialize an Indexing Service Admin object. Call Connect_Click ' For resize. InitialWidth = ISAdminForm.Width InitialHeight = ISAdminForm.Height FormWidth = ISAdminForm.Width FormHeight = ISAdminForm.Height NonListViewWidth = ISAdminForm.Width - ListView1.Width NonListViewHeight = ISAdminForm.Height - ListView1.Height NonTreeViewHeight = ISAdminForm.Height - TreeView1.Height ErrorHandler: If (Err.Number) Then MsgBox (Err.Description) End If End Sub ' Adjust the ListView and Catalog positions on resize. Private Sub Form_Resize() If ISAdminForm.Width < InitialWidth Then ISAdminForm.Width = InitialWidth End If If ISAdminForm.Height < 5000 Then If FormHeight < InitialHeight Then ISAdminForm.Height = FormHeight Else ISAdminForm.Height = InitialHeight End If End If FormWidth = ISAdminForm.Width FormHeight = ISAdminForm.Height ListView1.Width = ISAdminForm.Width - NonListViewWidth ListView1.Height = ISAdminForm.Height - NonListViewHeight TreeView1.Height = ISAdminForm.Height - NonTreeViewHeight End Sub Private Sub PopulateCatalogTreeView() On Error GoTo ErrorHandler mtcIndex = mNode.Index Dim nodX As Node Dim fFound As Boolean ' Loop thru Indexing Service catalogs populating the tree control. fFound = gCiAdmin.FindFirstCatalog Dim CiCatalog As Object Dim lItem As ListItem mTVNodeCount = 1 While (fFound) mTVNodeCount = mTVNodeCount + 1 Set CiCatalog = gCiAdmin.GetCatalog() Set nodX = TreeView1.Nodes.Add(mtcIndex, tvwChild, , CiCatalog.CatalogName) nodX.Tag = CiCatalog.CatalogLocation Set lItem = ListView1.ListItems.Add(, , CiCatalog.CatalogLocation) Set CiCatalog = Nothing fFound = gCiAdmin.FindNextCatalog Wend ErrorHandler: Set CiCatalog = Nothing Set lItem = Nothing If (Err.Number) Then MsgBox (Err.Description) End If End Sub Private Sub ClearCatalogColumns() ListView1.ColumnHeaders.Clear ListView1.ListItems.Clear End Sub Private Sub MakeCatalogColumns() On Error GoTo ErrorHandler ListView1.ColumnHeaders.Clear ListView1.ListItems.Clear ' Set ListView column headers. ListView1.ColumnHeaders.Add , , "Location" ListView1.ColumnHeaders.Add , , "Index Size (MB)" ListView1.ColumnHeaders.Add , , "IsIndex Up To Date" ListView1.ColumnHeaders.Add , , "Pending Scan Count" ListView1.ColumnHeaders.Add , , "Documents To Filter" ListView1.ColumnHeaders.Add , , "Filtered Document Count" ListView1.ColumnHeaders.Add , , "Total Document Count" ListView1.ColumnHeaders.Add , , "% Merge" Dim CiCatalog As Object Dim lItem As ListItem Dim fFound As Boolean ' Loop, getting each catalog status info. fFound = gCiAdmin.FindFirstCatalog While (fFound) Set CiCatalog = gCiAdmin.GetCatalog Set lItem = ListView1.ListItems.Add(, , CiCatalog.CatalogLocation) If (gCiAdmin.IsRunning) Then lItem.SubItems(1) = CiCatalog.IndexSize lItem.SubItems(2) = CiCatalog.IsUpToDate lItem.SubItems(3) = CiCatalog.PendingScanCount lItem.SubItems(4) = CiCatalog.DocumentsToFilter lItem.SubItems(5) = CiCatalog.FilteredDocumentCount lItem.SubItems(6) = CiCatalog.TotalDocumentCount lItem.SubItems(7) = CiCatalog.PctMergeComplete End If Timer1.Enabled = True ' Enable timer. GetMoreProperties: Set CiCatalog = Nothing Set lItem = Nothing fFound = gCiAdmin.FindNextCatalog Wend ErrorHandler: blnScopesExpanded = False Set CiCatalog = Nothing Set lItem = Nothing If (Err.Number) Then If (fFound) Then GoTo GetMoreProperties End If End If End Sub Private Sub MakeScopesColumns(ByVal CatalogName As String) On Error GoTo ErrorHandler Timer1.Enabled = False ' Disable timer, need only for catalog status. ListView1.ColumnHeaders.Clear ListView1.ListItems.Clear ' Set ListView column headers. ListView1.ColumnHeaders.Add , , "Directory" ListView1.ColumnHeaders.Add , , "Alias" ListView1.ColumnHeaders.Add , , "Include in Catalog" ListView1.ColumnHeaders.Add , , "Virtual" Dim CiCatalog As Object Dim CiScope As Object Dim fFound As Boolean Dim lItem As ListItem ' Get Indexing Service catalog object, then enumerate its scopes. Set CiCatalog = gCiAdmin.GetCatalogByName(CatalogName) fFound = CiCatalog.FindFirstScope While (fFound) Set CiScope = CiCatalog.GetScope() Set lItem = ListView1.ListItems.Add(, , CiScope.Path) lItem.SubItems(1) = CiScope.Alias lItem.SubItems(3) = CiScope.VirtualScope lItem.Tag = CiCatalog.CatalogName If CiScope.ExcludeScope Then lItem.SubItems(2) = False Else lItem.SubItems(2) = True End If fFound = CiCatalog.FindNextScope Set CiScope = Nothing Set lItem = Nothing Wend ' Set this flag only if we successfully finish. blnScopesExpanded = True ErrorHandler: Set CiCatalog = Nothing Set CiScope = Nothing Set lItem = Nothing End Sub Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem) On Error GoTo ErrorHandler If (blnScopesExpanded = False Or gfLVRightMouse = False) Then Exit Sub End If Static fActive As Boolean If (fActive) Then fActive = False Exit Sub End If ' Create the AdminScopes form. Set AdminScopesPage = New AdminScopes AdminScopesPage.RemoveScopeSel = True AdminScopesPage.FullRescanSel = False AdminScopesPage.IncRescanSel = False AdminScopesPage.CatName = Item.Tag AdminScopesPage.ScopeName = Item.Text AdminScopesPage.Show vbModal Call MakeScopesColumns(Item.Tag) ErrorHandler: If (Err.Number) Then MsgBox (Err.Description) End If fActive = True End Sub Private Sub ListView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If (Button = vbRightButton) Then gfLVRightMouse = True Else gfLVRightMouse = False End If End Sub Private Sub StartCisvc_Click() On Error GoTo ErrorHandler Dim DefaultMousePointer As Integer DefaultMousePointer = MousePointer MousePointer = 11 ' Hour glass. gCiAdmin.Start ' Start cisvc.exe service. Sleep (30000) ' Give time for cisvc.exe to run. StopCisvc.Enabled = True StartCisvc.Enabled = False ErrorHandler: MousePointer = DefaultMousePointer If (Err.Number) Then MsgBox (Err.Description) End If End Sub Private Sub StopCisvc_Click() On Error GoTo ErrorHandler Dim DefaultMousePointer As Integer DefaultMousePointer = MousePointer MousePointer = 11 ' Hour glass. gCiAdmin.Stop ' Stop cisvc.exe service. StopCisvc.Enabled = False StartCisvc.Enabled = True ErrorHandler: MousePointer = DefaultMousePointer If (Err.Number) Then MsgBox (Err.Description) End If End Sub Private Sub Timer1_Timer() If (gCiAdmin.IsRunning) Then Call MakeCatalogColumns End If End Sub Private Sub TreeView1_Collapse(ByVal Node As MSComctlLib.Node) Timer1.Enabled = False Call ClearCatalogColumns End Sub Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node) Call MakeCatalogColumns End Sub Private Sub TreeView1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If (Button = vbRightButton) Then gfRightPressed = True Else gfRightPressed = False End If End Sub Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) On Error GoTo ErrorHandler If Node.Text <> "Catalogs" Then If (gfRightPressed) Then Call OperationsOnCatalog(Node.Text) Else MakeScopesColumns (Node.Text) End If ElseIf Node.Text = "Catalogs" Then If (gfRightPressed) Then Call AddCatalogMethod ElseIf Node.Expanded Then MakeCatalogColumns End If End If ErrorHandler: If (Err.Number) Then MsgBox (Err.Description) End If End Sub Private Sub OperationsOnCatalog(ByVal strCatName As String) Set CatalogConfigPage = New AdminCatalog CatalogConfigPage.ScanAllScopesOption.Value = True CatalogConfigPage.Tag = strCatName CatalogConfigPage.Show vbModal Call MakeScopesColumns(strCatName) End Sub Private Sub AddCatalogMethod() Set AddCatalogPage = New AddCatalog AddCatalogPage.Show vbModal Call Connect_Click ' Refresh the catalog list. End Sub