You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1711 lines
55 KiB
1711 lines
55 KiB
VERSION 5.00
|
|
Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.2#0"; "comctl32.ocx"
|
|
Begin VB.Form MainForm
|
|
Caption = "Metabase Editor"
|
|
ClientHeight = 7590
|
|
ClientLeft = 165
|
|
ClientTop = 735
|
|
ClientWidth = 10290
|
|
Icon = "MetaEdit.frx":0000
|
|
LinkTopic = "Form1"
|
|
ScaleHeight = 7590
|
|
ScaleWidth = 10290
|
|
StartUpPosition = 3 'Windows Default
|
|
Begin ComctlLib.ListView DataListView
|
|
Height = 4575
|
|
Left = 3720
|
|
TabIndex = 1
|
|
Top = 120
|
|
Width = 6495
|
|
_ExtentX = 11456
|
|
_ExtentY = 8070
|
|
View = 3
|
|
LabelEdit = 1
|
|
Sorted = -1 'True
|
|
LabelWrap = -1 'True
|
|
HideSelection = -1 'True
|
|
_Version = 327680
|
|
Icons = "DataImageList"
|
|
SmallIcons = "DataImageList"
|
|
ForeColor = -2147483640
|
|
BackColor = -2147483643
|
|
Appearance = 1
|
|
MouseIcon = "MetaEdit.frx":0442
|
|
NumItems = 6
|
|
BeginProperty ColumnHeader(1) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
Key = "Id"
|
|
Object.Tag = ""
|
|
Text = "Id"
|
|
Object.Width = 176
|
|
EndProperty
|
|
BeginProperty ColumnHeader(2) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 1
|
|
Key = "Name"
|
|
Object.Tag = ""
|
|
Text = "Name"
|
|
Object.Width = 176
|
|
EndProperty
|
|
BeginProperty ColumnHeader(3) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 2
|
|
Key = "Attributes"
|
|
Object.Tag = ""
|
|
Text = "Attributes"
|
|
Object.Width = 176
|
|
EndProperty
|
|
BeginProperty ColumnHeader(4) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 3
|
|
Key = "UserType"
|
|
Object.Tag = ""
|
|
Text = "UT"
|
|
Object.Width = 176
|
|
EndProperty
|
|
BeginProperty ColumnHeader(5) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 4
|
|
Key = "DataType"
|
|
Object.Tag = ""
|
|
Text = "DT"
|
|
Object.Width = 176
|
|
EndProperty
|
|
BeginProperty ColumnHeader(6) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 5
|
|
Key = "Data"
|
|
Object.Tag = ""
|
|
Text = "Data"
|
|
Object.Width = 176
|
|
EndProperty
|
|
End
|
|
Begin ComctlLib.StatusBar MainStatusBar
|
|
Align = 2 'Align Bottom
|
|
Height = 375
|
|
Left = 0
|
|
TabIndex = 2
|
|
Top = 7215
|
|
Width = 10290
|
|
_ExtentX = 18150
|
|
_ExtentY = 661
|
|
Style = 1
|
|
SimpleText = ""
|
|
_Version = 327680
|
|
BeginProperty Panels {0713E89E-850A-101B-AFC0-4210102A8DA7}
|
|
NumPanels = 1
|
|
BeginProperty Panel1 {0713E89F-850A-101B-AFC0-4210102A8DA7}
|
|
TextSave = ""
|
|
Key = ""
|
|
Object.Tag = ""
|
|
EndProperty
|
|
EndProperty
|
|
MouseIcon = "MetaEdit.frx":045E
|
|
End
|
|
Begin ComctlLib.TreeView KeyTreeView
|
|
Height = 4575
|
|
Left = 120
|
|
TabIndex = 0
|
|
Top = 120
|
|
Width = 3495
|
|
_ExtentX = 6165
|
|
_ExtentY = 8070
|
|
_Version = 327680
|
|
Indentation = 529
|
|
LineStyle = 1
|
|
Style = 7
|
|
ImageList = "KeyImageList"
|
|
Appearance = 1
|
|
MouseIcon = "MetaEdit.frx":047A
|
|
End
|
|
Begin ComctlLib.ListView ErrorListView
|
|
Height = 2295
|
|
Left = 120
|
|
TabIndex = 3
|
|
Top = 4800
|
|
Visible = 0 'False
|
|
Width = 10095
|
|
_ExtentX = 17806
|
|
_ExtentY = 4048
|
|
View = 3
|
|
LabelEdit = 1
|
|
Sorted = -1 'True
|
|
LabelWrap = -1 'True
|
|
HideSelection = -1 'True
|
|
_Version = 327680
|
|
Icons = "ErrorImageList"
|
|
SmallIcons = "ErrorImageList"
|
|
ForeColor = -2147483640
|
|
BackColor = -2147483643
|
|
BorderStyle = 1
|
|
Appearance = 1
|
|
MouseIcon = "MetaEdit.frx":0496
|
|
NumItems = 5
|
|
BeginProperty ColumnHeader(1) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
Key = "Key"
|
|
Object.Tag = ""
|
|
Text = "Key"
|
|
Object.Width = 1764
|
|
EndProperty
|
|
BeginProperty ColumnHeader(2) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 1
|
|
Key = "Property"
|
|
Object.Tag = ""
|
|
Text = "Property"
|
|
Object.Width = 882
|
|
EndProperty
|
|
BeginProperty ColumnHeader(3) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 2
|
|
Key = "Id"
|
|
Object.Tag = ""
|
|
Text = "Id"
|
|
Object.Width = 882
|
|
EndProperty
|
|
BeginProperty ColumnHeader(4) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 3
|
|
Key = "Severity"
|
|
Object.Tag = ""
|
|
Text = "Severity"
|
|
Object.Width = 882
|
|
EndProperty
|
|
BeginProperty ColumnHeader(5) {0713E8C7-850A-101B-AFC0-4210102A8DA7}
|
|
SubItemIndex = 4
|
|
Key = "Description"
|
|
Object.Tag = ""
|
|
Text = "Description"
|
|
Object.Width = 2646
|
|
EndProperty
|
|
End
|
|
Begin ComctlLib.ImageList ErrorImageList
|
|
Left = 1560
|
|
Top = 7200
|
|
_ExtentX = 1005
|
|
_ExtentY = 1005
|
|
BackColor = -2147483643
|
|
ImageWidth = 16
|
|
ImageHeight = 16
|
|
MaskColor = 12632256
|
|
_Version = 327680
|
|
BeginProperty Images {0713E8C2-850A-101B-AFC0-4210102A8DA7}
|
|
NumListImages = 3
|
|
BeginProperty ListImage1 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":04B2
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage2 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":07CC
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage3 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":0AE6
|
|
Key = ""
|
|
EndProperty
|
|
EndProperty
|
|
End
|
|
Begin ComctlLib.ImageList DataImageList
|
|
Left = 840
|
|
Top = 7200
|
|
_ExtentX = 1005
|
|
_ExtentY = 1005
|
|
BackColor = -2147483643
|
|
ImageWidth = 16
|
|
ImageHeight = 16
|
|
MaskColor = 12632256
|
|
_Version = 327680
|
|
BeginProperty Images {0713E8C2-850A-101B-AFC0-4210102A8DA7}
|
|
NumListImages = 2
|
|
BeginProperty ListImage1 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":0E00
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage2 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":111A
|
|
Key = ""
|
|
EndProperty
|
|
EndProperty
|
|
End
|
|
Begin ComctlLib.ImageList KeyImageList
|
|
Left = 120
|
|
Top = 7200
|
|
_ExtentX = 1005
|
|
_ExtentY = 1005
|
|
BackColor = -2147483643
|
|
ImageWidth = 16
|
|
ImageHeight = 16
|
|
MaskColor = 12632256
|
|
UseMaskColor = 0 'False
|
|
_Version = 327680
|
|
BeginProperty Images {0713E8C2-850A-101B-AFC0-4210102A8DA7}
|
|
NumListImages = 5
|
|
BeginProperty ListImage1 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":1434
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage2 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":174E
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage3 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":1A68
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage4 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":1D82
|
|
Key = ""
|
|
EndProperty
|
|
BeginProperty ListImage5 {0713E8C3-850A-101B-AFC0-4210102A8DA7}
|
|
Picture = "MetaEdit.frx":209C
|
|
Key = ""
|
|
EndProperty
|
|
EndProperty
|
|
End
|
|
Begin VB.Menu MetabaseMenu
|
|
Caption = "&Metabase"
|
|
Begin VB.Menu BackupMenuItem
|
|
Caption = "&Backup"
|
|
Visible = 0 'False
|
|
End
|
|
Begin VB.Menu RestoreMenuItem
|
|
Caption = "&Restore"
|
|
Visible = 0 'False
|
|
End
|
|
Begin VB.Menu Seperator11
|
|
Caption = "-"
|
|
Visible = 0 'False
|
|
End
|
|
Begin VB.Menu ExitMenuItem
|
|
Caption = "E&xit"
|
|
End
|
|
End
|
|
Begin VB.Menu EditMenu
|
|
Caption = "&Edit"
|
|
Begin VB.Menu NewMenu
|
|
Caption = "&New"
|
|
Begin VB.Menu NewKeyMenuItem
|
|
Caption = "&Key"
|
|
End
|
|
Begin VB.Menu Seperator211
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu NewDwordMenuItem
|
|
Caption = "&DWORD"
|
|
End
|
|
Begin VB.Menu NewStringMenuItem
|
|
Caption = "&String"
|
|
End
|
|
Begin VB.Menu NewBinaryMenuItem
|
|
Caption = "&Binary"
|
|
End
|
|
Begin VB.Menu NewExpandStringMenuItem
|
|
Caption = "&Expand String"
|
|
End
|
|
Begin VB.Menu NewMultiStringMenuItem
|
|
Caption = "&Multi-String"
|
|
End
|
|
End
|
|
Begin VB.Menu DeleteMenuItem
|
|
Caption = "&Delete"
|
|
Shortcut = {DEL}
|
|
End
|
|
Begin VB.Menu Seperator21
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu RenameKeyMenuItem
|
|
Caption = "&Rename Key"
|
|
End
|
|
Begin VB.Menu CopyKeyMenuItem
|
|
Caption = "&Copy Key"
|
|
End
|
|
End
|
|
Begin VB.Menu SearchMenu
|
|
Caption = "&Search"
|
|
Begin VB.Menu FindMenuItem
|
|
Caption = "&Find"
|
|
Shortcut = ^F
|
|
End
|
|
Begin VB.Menu FindNextMenuItem
|
|
Caption = "Find &Next"
|
|
Shortcut = {F3}
|
|
End
|
|
End
|
|
Begin VB.Menu CheckMenu
|
|
Caption = "&Check"
|
|
Begin VB.Menu CheckSchemaMenuItem
|
|
Caption = "&Schema"
|
|
End
|
|
Begin VB.Menu CheckKeyMenuItem
|
|
Caption = "&Key"
|
|
End
|
|
Begin VB.Menu CheckAllMenuItem
|
|
Caption = "&All Keys"
|
|
End
|
|
Begin VB.Menu Seperator31
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu CheckOptionsMenuItem
|
|
Caption = "&Options"
|
|
End
|
|
End
|
|
Begin VB.Menu ViewMenu
|
|
Caption = "&View"
|
|
Begin VB.Menu ErrorListMenuItem
|
|
Caption = "&Error List"
|
|
Checked = -1 'True
|
|
End
|
|
Begin VB.Menu StatusBarMenuItem
|
|
Caption = "&Status Bar"
|
|
Checked = -1 'True
|
|
End
|
|
Begin VB.Menu Seprerator41
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu RefreshMenuItem
|
|
Caption = "&Refresh"
|
|
Shortcut = {F5}
|
|
End
|
|
End
|
|
Begin VB.Menu HelpMenu
|
|
Caption = "&Help"
|
|
Begin VB.Menu AboutMenuItem
|
|
Caption = "&About Metabase Editor"
|
|
End
|
|
End
|
|
Begin VB.Menu KeyMenu
|
|
Caption = "KeyMenu"
|
|
Visible = 0 'False
|
|
Begin VB.Menu ExpandKeyMenuItem
|
|
Caption = "&Expand"
|
|
End
|
|
Begin VB.Menu Seperator61
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu KeyNewMenuItem
|
|
Caption = "&New"
|
|
Begin VB.Menu KeyNewKeyMenuItem
|
|
Caption = "&Key"
|
|
End
|
|
Begin VB.Menu Seperator611
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu KeyNewDwordMenuItem
|
|
Caption = "&DWORD"
|
|
End
|
|
Begin VB.Menu KeyNewStringMenuItem
|
|
Caption = "&String"
|
|
End
|
|
Begin VB.Menu KeyNewBinaryMenuItem
|
|
Caption = "&Binary"
|
|
End
|
|
Begin VB.Menu KeyNewExpandSzMenuItem
|
|
Caption = "&Expand String"
|
|
End
|
|
Begin VB.Menu KeyNewMultiSzMenuItem
|
|
Caption = "&Multi-String"
|
|
End
|
|
End
|
|
Begin VB.Menu KeyDeleteMenuItem
|
|
Caption = "&Delete"
|
|
End
|
|
Begin VB.Menu KeyRenameMenuItem
|
|
Caption = "&Rename"
|
|
End
|
|
Begin VB.Menu KeyCopyMenuItem
|
|
Caption = "&Copy"
|
|
End
|
|
Begin VB.Menu Seperator62
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu KeyCheckMenuItem
|
|
Caption = "&Check"
|
|
End
|
|
End
|
|
Begin VB.Menu DataMenu
|
|
Caption = "DataMenu"
|
|
Visible = 0 'False
|
|
Begin VB.Menu DataModifyMenuItem
|
|
Caption = "&Modify"
|
|
End
|
|
Begin VB.Menu Seperator71
|
|
Caption = "-"
|
|
End
|
|
Begin VB.Menu DataNewMenu
|
|
Caption = "&New"
|
|
Begin VB.Menu DataNewDwordMenuItem
|
|
Caption = "&DWORD"
|
|
End
|
|
Begin VB.Menu DataNewStringMenuItem
|
|
Caption = "&String"
|
|
End
|
|
Begin VB.Menu DataNewBinaryMenuItem
|
|
Caption = "&Binary"
|
|
End
|
|
Begin VB.Menu DataNewExpandSzMenuItem
|
|
Caption = "&ExpandString"
|
|
End
|
|
Begin VB.Menu DataNewMultiSzMenuItem
|
|
Caption = "&Multi-String"
|
|
End
|
|
End
|
|
Begin VB.Menu DataDeleteMenuItem
|
|
Caption = "&Delete"
|
|
End
|
|
End
|
|
End
|
|
Attribute VB_Name = "MainForm"
|
|
Attribute VB_GlobalNameSpace = False
|
|
Attribute VB_Creatable = False
|
|
Attribute VB_PredeclaredId = True
|
|
Attribute VB_Exposed = False
|
|
Option Explicit
|
|
DefInt A-Z
|
|
|
|
'Globals
|
|
|
|
'Metabase globals
|
|
Public MetaUtilObj As Object
|
|
|
|
Const METADATA_NO_ATTRIBUTES = &H0
|
|
Const METADATA_INHERIT = &H1
|
|
Const METADATA_PARTIAL_PATH = &H2
|
|
Const METADATA_SECURE = &H4
|
|
Const METADATA_REFERENCE = &H8
|
|
Const METADATA_VOLATILE = &H10
|
|
Const METADATA_ISINHERITED = &H20
|
|
Const METADATA_INSERT_PATH = &H40
|
|
|
|
Const IIS_MD_UT_SERVER = 1
|
|
Const IIS_MD_UT_FILE = 2
|
|
Const IIS_MD_UT_WAM = 100
|
|
Const ASP_MD_UT_APP = 101
|
|
|
|
Const ALL_METADATA = 0
|
|
Const DWORD_METADATA = 1
|
|
Const STRING_METADATA = 2
|
|
Const BINARY_METADATA = 3
|
|
Const EXPANDSZ_METADATA = 4
|
|
Const MULTISZ_METADATA = 5
|
|
|
|
'Layout globals
|
|
Const FormBoarder = 40
|
|
Dim VDividerPos As Long 'Start of divider
|
|
Dim HDividerPos As Long 'Top relative to the status bar
|
|
Dim VDividerHeld As Boolean
|
|
Dim HDividerHeld As Boolean
|
|
|
|
'State globals
|
|
Dim AppCursor As Long
|
|
Dim KeyLabelEditOrigText As String
|
|
Dim KeyLabelEditOrigFullPath As String
|
|
|
|
Private Sub Form_Load()
|
|
AppCursor = vbDefault
|
|
VDividerHeld = False
|
|
HDividerHeld = False
|
|
|
|
'Load Config
|
|
Config.LoadConfig
|
|
|
|
'Setup the form
|
|
VDividerPos = Config.MainFormVDivider
|
|
HDividerPos = Config.MainFormHDivider
|
|
MainForm.Height = Config.MainFormHeight
|
|
MainForm.Width = Config.MainFormWidth
|
|
If Config.StatusBar Then
|
|
MainStatusBar.Visible = True
|
|
StatusBarMenuItem.Checked = True
|
|
Else
|
|
MainStatusBar.Visible = False
|
|
StatusBarMenuItem.Checked = False
|
|
End If
|
|
ErrorListMenuItem.Checked = False
|
|
ErrorListView.Visible = False
|
|
LayoutForm
|
|
|
|
DataListView.ColumnHeaders(1).Width = Config.DataListIdColWidth
|
|
DataListView.ColumnHeaders(2).Width = Config.DataListNameColWidth
|
|
DataListView.ColumnHeaders(3).Width = Config.DataListAttrColWidth
|
|
DataListView.ColumnHeaders(4).Width = Config.DataListUTColWidth
|
|
DataListView.ColumnHeaders(5).Width = Config.DataListDTColWidth
|
|
DataListView.ColumnHeaders(6).Width = Config.DataListDataColWidth
|
|
|
|
ErrorListView.ColumnHeaders(1).Width = Config.ErrorListKeyColWidth
|
|
ErrorListView.ColumnHeaders(2).Width = Config.ErrorListPropColWidth
|
|
ErrorListView.ColumnHeaders(3).Width = Config.ErrorListIdColWidth
|
|
ErrorListView.ColumnHeaders(4).Width = Config.ErrorListSeverityColWidth
|
|
ErrorListView.ColumnHeaders(5).Width = Config.ErrorListDescColWidth
|
|
|
|
'MsgBox "You may now attach your debugger."
|
|
|
|
'Set the data
|
|
Set MetaUtilObj = CreateObject("MSWC.MetaUtil")
|
|
|
|
LoadKeys
|
|
ShowSelectedNode
|
|
End Sub
|
|
|
|
Private Sub Form_Unload(Cancel As Integer)
|
|
If MainForm.WindowState = vbNormal Then
|
|
Config.MainFormHeight = MainForm.Height
|
|
Config.MainFormWidth = MainForm.Width
|
|
End If
|
|
Config.MainFormVDivider = VDividerPos
|
|
Config.MainFormHDivider = HDividerPos
|
|
|
|
Config.DataListIdColWidth = DataListView.ColumnHeaders(1).Width
|
|
Config.DataListNameColWidth = DataListView.ColumnHeaders(2).Width
|
|
Config.DataListAttrColWidth = DataListView.ColumnHeaders(3).Width
|
|
Config.DataListUTColWidth = DataListView.ColumnHeaders(4).Width
|
|
Config.DataListDTColWidth = DataListView.ColumnHeaders(5).Width
|
|
Config.DataListDataColWidth = DataListView.ColumnHeaders(6).Width
|
|
|
|
Config.ErrorListKeyColWidth = ErrorListView.ColumnHeaders(1).Width
|
|
Config.ErrorListPropColWidth = ErrorListView.ColumnHeaders(2).Width
|
|
Config.ErrorListIdColWidth = ErrorListView.ColumnHeaders(3).Width
|
|
Config.ErrorListSeverityColWidth = ErrorListView.ColumnHeaders(4).Width
|
|
Config.ErrorListDescColWidth = ErrorListView.ColumnHeaders(5).Width
|
|
|
|
Config.SaveConfig
|
|
End Sub
|
|
|
|
Private Sub Form_Resize()
|
|
LayoutForm
|
|
End Sub
|
|
|
|
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If (x > VDividerPos) And _
|
|
(x < VDividerPos + FormBoarder) And _
|
|
(y <= KeyTreeView.Top + KeyTreeView.Height) Then
|
|
VDividerHeld = True
|
|
ElseIf ErrorListView.Visible And _
|
|
(y > KeyTreeView.Top + KeyTreeView.Height) And _
|
|
(y < ErrorListView.Top) Then
|
|
HDividerHeld = True
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If (x > VDividerPos) And _
|
|
(x < VDividerPos + FormBoarder) And _
|
|
(y <= KeyTreeView.Top + KeyTreeView.Height) Then
|
|
'Show that the divider can be moved
|
|
MainForm.MousePointer = vbSizeWE
|
|
ElseIf ErrorListView.Visible And _
|
|
(y > KeyTreeView.Top + KeyTreeView.Height) And _
|
|
(y < ErrorListView.Top) Then
|
|
'Show that the divider can be moved
|
|
MainForm.MousePointer = vbSizeNS
|
|
ElseIf Not (VDividerHeld Or HDividerHeld) Then
|
|
'Revert to normal
|
|
MainForm.MousePointer = AppCursor
|
|
End If
|
|
|
|
If VDividerHeld Then
|
|
'Move the divider, centering on the cursor
|
|
VDividerPos = x - (FormBoarder / 2)
|
|
LayoutForm
|
|
ElseIf HDividerHeld Then
|
|
'Move the divider, centering on the cursor
|
|
If MainStatusBar.Visible Then
|
|
HDividerPos = MainStatusBar.Top - y - FormBoarder - (FormBoarder / 2)
|
|
Else
|
|
HDividerPos = MainForm.ScaleHeight - y - FormBoarder - (FormBoarder / 2)
|
|
End If
|
|
LayoutForm
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If Not (VDividerHeld Or HDividerHeld) Then
|
|
'Revert to normal
|
|
MainForm.MousePointer = AppCursor
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DataListView_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If Not (VDividerHeld Or HDividerHeld) Then
|
|
'Revert to normal
|
|
MainForm.MousePointer = AppCursor
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ErrorListView_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If Not (VDividerHeld Or HDividerHeld) Then
|
|
'Revert to normal
|
|
MainForm.MousePointer = AppCursor
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If VDividerHeld Then
|
|
'Move the divider, centering on the cursor
|
|
VDividerPos = x - (FormBoarder / 2)
|
|
LayoutForm
|
|
VDividerHeld = False
|
|
ElseIf HDividerHeld Then
|
|
'Move the divider, centering on the cursor
|
|
If MainStatusBar.Visible Then
|
|
HDividerPos = MainStatusBar.Top - y - FormBoarder - (FormBoarder / 2)
|
|
Else
|
|
HDividerPos = MainForm.ScaleHeight - y - FormBoarder - (FormBoarder / 2)
|
|
End If
|
|
LayoutForm
|
|
HDividerHeld = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub LayoutForm()
|
|
If MainForm.WindowState <> vbMinimized Then
|
|
'Enforce divider ranges
|
|
If VDividerPos < 2 * FormBoarder Then
|
|
VDividerPos = 2 * FormBoarder
|
|
ElseIf VDividerPos > MainForm.ScaleWidth - (FormBoarder * 2) Then
|
|
VDividerPos = MainForm.ScaleWidth - (FormBoarder * 2)
|
|
End If
|
|
|
|
If HDividerPos < FormBoarder Then
|
|
HDividerPos = FormBoarder
|
|
ElseIf HDividerPos > MainForm.ScaleHeight - MainStatusBar.Height - (FormBoarder * 3) Then
|
|
HDividerPos = MainForm.ScaleHeight - MainStatusBar.Height - (FormBoarder * 3)
|
|
End If
|
|
|
|
'Enforce a minimum size
|
|
If MainForm.ScaleWidth < FormBoarder * 3 + VDividerPos Then
|
|
MainForm.Width = (MainForm.Width - MainForm.ScaleWidth) + FormBoarder * 3 + VDividerPos
|
|
Exit Sub
|
|
End If
|
|
|
|
If MainStatusBar.Visible And ErrorListView.Visible Then
|
|
If MainForm.ScaleHeight < MainStatusBar.Height + HDividerPos + (FormBoarder * 4) Then
|
|
MainForm.Height = (MainForm.Height - MainForm.ScaleHeight) + MainStatusBar.Height + HDividerPos + (FormBoarder * 4)
|
|
Exit Sub
|
|
End If
|
|
ElseIf MainStatusBar.Visible Then
|
|
If MainForm.ScaleHeight < MainStatusBar.Height + (FormBoarder * 3) Then
|
|
MainForm.Height = (MainForm.Height - MainForm.ScaleHeight) + MainStatusBar.Height + (FormBoarder * 3)
|
|
Exit Sub
|
|
End If
|
|
ElseIf ErrorListView.Visible Then
|
|
If MainForm.ScaleHeight < HDividerPos + (FormBoarder * 3) Then
|
|
MainForm.Height = (MainForm.Height - MainForm.ScaleHeight) + HDividerPos + (FormBoarder * 3)
|
|
Exit Sub
|
|
End If
|
|
Else
|
|
If MainForm.ScaleHeight < (FormBoarder * 3) Then
|
|
MainForm.ScaleHeight = (MainForm.Height - MainForm.ScaleHeight) + (FormBoarder * 3)
|
|
Exit Sub
|
|
End If
|
|
End If
|
|
|
|
'KeyTreeView
|
|
KeyTreeView.Left = FormBoarder
|
|
KeyTreeView.Top = FormBoarder
|
|
KeyTreeView.Width = VDividerPos - FormBoarder
|
|
If MainStatusBar.Visible And ErrorListView.Visible Then
|
|
KeyTreeView.Height = MainForm.ScaleHeight - HDividerPos - MainStatusBar.Height - (3 * FormBoarder)
|
|
ElseIf MainStatusBar.Visible Then
|
|
KeyTreeView.Height = MainForm.ScaleHeight - MainStatusBar.Height - (2 * FormBoarder)
|
|
ElseIf ErrorListView.Visible Then
|
|
KeyTreeView.Height = MainForm.ScaleHeight - HDividerPos - (3 * FormBoarder)
|
|
Else
|
|
KeyTreeView.Height = MainForm.ScaleHeight - (2 * FormBoarder)
|
|
End If
|
|
|
|
'DataListView
|
|
DataListView.Left = VDividerPos + FormBoarder
|
|
DataListView.Top = FormBoarder
|
|
DataListView.Width = MainForm.ScaleWidth - VDividerPos - (2 * FormBoarder)
|
|
If MainStatusBar.Visible And ErrorListView.Visible Then
|
|
DataListView.Height = MainForm.ScaleHeight - HDividerPos - MainStatusBar.Height - (3 * FormBoarder)
|
|
ElseIf MainStatusBar.Visible Then
|
|
DataListView.Height = MainForm.ScaleHeight - MainStatusBar.Height - (2 * FormBoarder)
|
|
ElseIf ErrorListView.Visible Then
|
|
DataListView.Height = MainForm.ScaleHeight - HDividerPos - (3 * FormBoarder)
|
|
Else
|
|
DataListView.Height = MainForm.ScaleHeight - (2 * FormBoarder)
|
|
End If
|
|
|
|
'ErrorListView
|
|
If ErrorListView.Visible Then
|
|
ErrorListView.Left = FormBoarder
|
|
ErrorListView.Width = MainForm.ScaleWidth - (2 * FormBoarder)
|
|
ErrorListView.Top = KeyTreeView.Top + KeyTreeView.Height + FormBoarder
|
|
ErrorListView.Height = HDividerPos
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_Expand(ByVal CurNode As ComctlLib.Node)
|
|
'Look for grandchildren
|
|
If (CurNode.Tag) And (CurNode.Children > 0) Then
|
|
Dim SubNode As Node
|
|
Dim SubKeyStr As Variant
|
|
Dim NewNode As Node
|
|
|
|
'For Each sub-node
|
|
Set SubNode = CurNode.Child
|
|
Do
|
|
For Each SubKeyStr In MetaUtilObj.EnumKeys(SubNode.FullPath)
|
|
Set NewNode = KeyTreeView.Nodes.Add(SubNode, tvwChild, SubNode.FullPath & "/" & SubKeyStr, SubKeyStr)
|
|
NewNode.Key = NewNode.FullPath
|
|
NewNode.Image = 1
|
|
NewNode.ExpandedImage = 2
|
|
'Set node as unvisited
|
|
NewNode.Tag = True
|
|
Next
|
|
|
|
'Resort
|
|
SubNode.Sorted = True
|
|
|
|
'Next sub-node or bail
|
|
If SubNode Is SubNode.LastSibling Then Exit Do
|
|
Set SubNode = SubNode.Next
|
|
Loop
|
|
|
|
'Set node as visited
|
|
CurNode.Tag = False
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_Collapse(ByVal Node As ComctlLib.Node)
|
|
ShowSelectedNode
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_KeyPress(KeyAscii As Integer)
|
|
ShowSelectedNode
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If Button = vbRightButton Then
|
|
PopupMenu KeyMenu, , , , ExpandKeyMenuItem
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_NodeClick(ByVal Node As ComctlLib.Node)
|
|
ShowSelectedNode
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_BeforeLabelEdit(Cancel As Integer)
|
|
If KeyTreeView.SelectedItem Is Nothing Then
|
|
'Cancel
|
|
Cancel = 1
|
|
Else
|
|
KeyLabelEditOrigText = KeyTreeView.SelectedItem.Text
|
|
KeyLabelEditOrigFullPath = KeyTreeView.SelectedItem.FullPath
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub KeyTreeView_AfterLabelEdit(Cancel As Integer, NewString As String)
|
|
On Error GoTo LError
|
|
|
|
Dim NewFullPath As String
|
|
|
|
If (KeyTreeView.SelectedItem Is Nothing) Or (NewString = "") Then
|
|
Cancel = 1
|
|
ElseIf KeyLabelEditOrigText <> "" Then
|
|
'Figure out the new full path
|
|
If KeyTreeView.SelectedItem.Root Is KeyTreeView.SelectedItem Then
|
|
NewFullPath = NewString
|
|
Else
|
|
NewFullPath = KeyTreeView.SelectedItem.Parent.FullPath & "\" & NewString
|
|
End If
|
|
|
|
If NewString <> KeyLabelEditOrigText Then
|
|
'Rename key
|
|
KeyTreeView.SelectedItem.Key = NewFullPath
|
|
MetaUtilObj.RenameKey KeyLabelEditOrigFullPath, NewFullPath
|
|
KeyTreeView.SelectedItem.Text = NewString
|
|
End If
|
|
End If
|
|
|
|
Exit Sub
|
|
|
|
LError:
|
|
KeyTreeView.SelectedItem.Text = KeyLabelEditOrigText
|
|
KeyTreeView.SelectedItem.Key = KeyLabelEditOrigFullPath
|
|
MsgBox "Failure to rename key: " & Err.Description, vbExclamation + vbOKOnly, "Rename Key"
|
|
Cancel = 1
|
|
End Sub
|
|
|
|
Private Sub LoadKeys()
|
|
'Clear selected node
|
|
DataListView.Tag = ""
|
|
|
|
'Initialize the tree
|
|
Dim KeyStr As Variant
|
|
Dim NewNode As Node
|
|
Dim SubKeyStr As Variant
|
|
Dim NewSubNode As Node
|
|
|
|
For Each KeyStr In MetaUtilObj.EnumKeys("")
|
|
Set NewNode = KeyTreeView.Nodes.Add(, , KeyStr, KeyStr)
|
|
NewNode.Key = NewNode.FullPath
|
|
NewNode.Image = 3
|
|
'Set node as unvisited
|
|
NewNode.Tag = True
|
|
|
|
For Each SubKeyStr In MetaUtilObj.EnumKeys(KeyStr)
|
|
Set NewSubNode = KeyTreeView.Nodes.Add(NewNode, tvwChild, KeyStr & "/" & SubKeyStr, SubKeyStr)
|
|
NewSubNode.Key = NewSubNode.FullPath
|
|
NewSubNode.Image = 1
|
|
NewSubNode.ExpandedImage = 2
|
|
'Set node as unvisited
|
|
NewSubNode.Tag = True
|
|
Next
|
|
|
|
'Resort
|
|
NewNode.Sorted = True
|
|
Next
|
|
|
|
'Resort
|
|
KeyTreeView.Sorted = True
|
|
|
|
Set KeyTreeView.SelectedItem = KeyTreeView.Nodes.Item(1)
|
|
End Sub
|
|
|
|
Public Sub SelectKey(Key As String)
|
|
Dim ParentKey As String
|
|
Dim ChildKey As String
|
|
Dim CurKey As String
|
|
|
|
ParentKey = Key
|
|
ChildKey = ""
|
|
Do While ParentKey <> ""
|
|
'Get the current key
|
|
CurKey = ""
|
|
Do While (ParentKey <> "") And _
|
|
(Left(ParentKey, 1) <> "\") And _
|
|
(Left(ParentKey, 1) <> "/")
|
|
CurKey = CurKey & Left(ParentKey, 1)
|
|
ParentKey = Right(ParentKey, Len(ParentKey) - 1)
|
|
Loop
|
|
If (ParentKey <> "") Then
|
|
'Skip the slash
|
|
ParentKey = Right(ParentKey, Len(ParentKey) - 1)
|
|
End If
|
|
|
|
If ChildKey = "" Then
|
|
ChildKey = CurKey
|
|
Else
|
|
ChildKey = ChildKey & "\" & CurKey
|
|
End If
|
|
|
|
If ParentKey <> "" Then
|
|
KeyTreeView.Nodes(ChildKey).Expanded = True
|
|
End If
|
|
Loop
|
|
|
|
Set KeyTreeView.SelectedItem = KeyTreeView.Nodes(ChildKey)
|
|
KeyTreeView.Nodes(ChildKey).EnsureVisible
|
|
ShowSelectedNode
|
|
KeyTreeView.SetFocus
|
|
End Sub
|
|
|
|
Private Sub RefreshKeys()
|
|
Dim SelectedKey As String
|
|
|
|
'Save the selected key
|
|
If KeyTreeView.SelectedItem Is Nothing Then
|
|
SelectedKey = ""
|
|
Else
|
|
SelectedKey = KeyTreeView.SelectedItem.FullPath
|
|
End If
|
|
|
|
'Reload
|
|
KeyTreeView.Nodes.Clear
|
|
LoadKeys
|
|
|
|
'Restore the selected key
|
|
If SelectedKey <> "" Then
|
|
SelectKey SelectedKey
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DataListView_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
|
|
If Button = vbRightButton Then
|
|
PopupMenu DataMenu, , , , DataModifyMenuItem
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DataListView_DblClick()
|
|
If Not DataListView.SelectedItem Is Nothing Then
|
|
'Edit the selected data item
|
|
|
|
|
|
|
|
If DataListView.SelectedItem.SubItems(4) = "DWord" Or _
|
|
DataListView.SelectedItem.SubItems(4) = "String" Or _
|
|
DataListView.SelectedItem.SubItems(4) = "ExpandSz" Or _
|
|
DataListView.SelectedItem.SubItems(4) = "Binary" Then
|
|
|
|
'Set the form parameters
|
|
SimpleEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
SimpleEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
SimpleEditForm.Id = CLng(DataListView.SelectedItem.Text)
|
|
|
|
'Run it
|
|
SimpleEditForm.Init
|
|
SimpleEditForm.Show vbModal, Me
|
|
|
|
ElseIf DataListView.SelectedItem.SubItems(4) = "MultiSz" Then
|
|
'Set the form parameters
|
|
MultiEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
MultiEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
MultiEditForm.Id = CLng(DataListView.SelectedItem.Text)
|
|
|
|
'Run it
|
|
MultiEditForm.Init
|
|
MultiEditForm.Show vbModal, Me
|
|
End If
|
|
|
|
'Refresh DataListView
|
|
RefreshData
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DataListView_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
|
|
If DataListView.SortKey = ColumnHeader.Index - 1 Then
|
|
'Reverse the sort order
|
|
If DataListView.SortOrder = lvwAscending Then
|
|
DataListView.SortOrder = lvwDescending
|
|
Else
|
|
DataListView.SortOrder = lvwAscending
|
|
End If
|
|
Else
|
|
'Sort ascending on this column
|
|
DataListView.SortOrder = lvwAscending
|
|
DataListView.SortKey = ColumnHeader.Index - 1
|
|
End If
|
|
|
|
' Resort
|
|
DataListView.Sorted = True
|
|
End Sub
|
|
|
|
Private Sub ShowSelectedNode()
|
|
Dim SelNode As Node
|
|
|
|
Set SelNode = KeyTreeView.SelectedItem
|
|
|
|
If SelNode Is Nothing Then
|
|
DataListView.ListItems.Clear
|
|
|
|
ElseIf SelNode.FullPath <> DataListView.Tag Then
|
|
'Update the status bar
|
|
MainStatusBar.SimpleText = SelNode.FullPath
|
|
|
|
'Update the DataListView
|
|
DataListView.Tag = SelNode.FullPath
|
|
DataListView.ListItems.Clear
|
|
|
|
'Property values are copied for efficency (less calls into Property)
|
|
Dim Property As Variant
|
|
Dim NewItem As ListItem
|
|
Dim Id As Long
|
|
Dim Attributes As Long
|
|
Dim AttrStr As String
|
|
Dim UserType As Long
|
|
Dim DataType As Long
|
|
Dim Data As Variant
|
|
Dim DataStr As String
|
|
Dim DataBStr As String
|
|
Dim i As Integer
|
|
Dim DataByte As Integer
|
|
|
|
For Each Property In MetaUtilObj.EnumProperties(SelNode.FullPath)
|
|
Set NewItem = DataListView.ListItems.Add()
|
|
|
|
'Id (padded with spaces so it sorts)
|
|
Id = Property.Id
|
|
NewItem.Text = String(10 - Len(Str(Id)), " ") + Str(Id)
|
|
|
|
'Name
|
|
NewItem.SubItems(1) = Property.Name
|
|
|
|
'Attributes
|
|
Attributes = Property.Attributes
|
|
AttrStr = ""
|
|
If (Attributes And METADATA_INHERIT) = METADATA_INHERIT Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "Inh"
|
|
End If
|
|
If (Attributes And METADATA_PARTIAL_PATH) = METADATA_PARTIAL_PATH Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "Pp"
|
|
End If
|
|
If (Attributes And METADATA_SECURE) = METADATA_SECURE Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "Sec"
|
|
End If
|
|
If (Attributes And METADATA_REFERENCE) = METADATA_REFERENCE Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "Ref"
|
|
End If
|
|
If (Attributes And METADATA_VOLATILE) = METADATA_VOLATILE Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "Vol"
|
|
End If
|
|
If (Attributes And METADATA_ISINHERITED) = METADATA_ISINHERITED Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "IsInh"
|
|
End If
|
|
If (Attributes And METADATA_INSERT_PATH) = METADATA_INSERT_PATH Then
|
|
If AttrStr <> "" Then AttrStr = AttrStr & " "
|
|
AttrStr = AttrStr & "Ins"
|
|
End If
|
|
|
|
NewItem.SubItems(2) = AttrStr
|
|
|
|
'User Type
|
|
UserType = Property.UserType
|
|
If UserType = IIS_MD_UT_SERVER Then
|
|
NewItem.SubItems(3) = "Server"
|
|
ElseIf UserType = IIS_MD_UT_FILE Then
|
|
NewItem.SubItems(3) = "File"
|
|
ElseIf UserType = IIS_MD_UT_WAM Then
|
|
NewItem.SubItems(3) = "WAM"
|
|
ElseIf UserType = ASP_MD_UT_APP Then
|
|
NewItem.SubItems(3) = "ASP App"
|
|
Else
|
|
NewItem.SubItems(3) = Str(UserType)
|
|
End If
|
|
|
|
|
|
'Data Type
|
|
DataType = Property.DataType
|
|
If DataType = ALL_METADATA Then
|
|
NewItem.SubItems(4) = "*All*"
|
|
ElseIf DataType = DWORD_METADATA Then
|
|
NewItem.SubItems(4) = "DWord"
|
|
ElseIf DataType = STRING_METADATA Then
|
|
NewItem.SubItems(4) = "String"
|
|
ElseIf DataType = BINARY_METADATA Then
|
|
NewItem.SubItems(4) = "Binary"
|
|
ElseIf DataType = EXPANDSZ_METADATA Then
|
|
NewItem.SubItems(4) = "ExpandSz"
|
|
ElseIf DataType = MULTISZ_METADATA Then
|
|
NewItem.SubItems(4) = "MultiSz"
|
|
Else
|
|
NewItem.SubItems(4) = "*Unknown*"
|
|
End If
|
|
|
|
'Data
|
|
Data = Property.Data
|
|
If (Attributes And METADATA_SECURE) = METADATA_SECURE Then
|
|
DataStr = "*Not Displayed*"
|
|
ElseIf DataType = BINARY_METADATA Then
|
|
'Display as a list of bytes
|
|
DataStr = ""
|
|
DataBStr = Property.Data
|
|
For i = 1 To LenB(DataBStr)
|
|
DataByte = AscB(MidB(DataBStr, i, 1))
|
|
If DataByte < 16 Then
|
|
DataStr = DataStr & "0" & Hex(AscB(MidB(DataBStr, i, 1))) & " "
|
|
Else
|
|
DataStr = DataStr & Hex(AscB(MidB(DataBStr, i, 1))) & " "
|
|
End If
|
|
Next
|
|
ElseIf DataType = MULTISZ_METADATA Then
|
|
'Display as a list of strings
|
|
If IsArray(Data) Then
|
|
DataStr = ""
|
|
For i = LBound(Data) To UBound(Data)
|
|
If i = LBound(Data) Then
|
|
DataStr = CStr(Data(i))
|
|
Else
|
|
DataStr = DataStr & " " & CStr(Data(i))
|
|
End If
|
|
Next
|
|
End If
|
|
Else
|
|
DataStr = CStr(Data)
|
|
End If
|
|
|
|
NewItem.SubItems(5) = DataStr
|
|
|
|
'Set the icon
|
|
If (DataType = STRING_METADATA) Or _
|
|
(DataType = EXPANDSZ_METADATA) Or _
|
|
(DataType = MULTISZ_METADATA) Then
|
|
NewItem.SmallIcon = 1
|
|
Else
|
|
NewItem.SmallIcon = 2
|
|
End If
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub SelectProperty(PropertyStr As String)
|
|
'Had to search since I couldn't get the key property working
|
|
Dim i As Long
|
|
|
|
i = 1
|
|
Do While (i <= DataListView.ListItems.Count) And (PropertyStr <> DataListView.ListItems(i))
|
|
i = i + 1
|
|
Loop
|
|
|
|
If PropertyStr = DataListView.ListItems(i) Then
|
|
'Found it
|
|
Set DataListView.SelectedItem = DataListView.ListItems(i)
|
|
DataListView.ListItems(i).EnsureVisible
|
|
DataListView.SetFocus
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub RefreshData()
|
|
Dim SelectedProperty As String
|
|
|
|
'Save the selected property
|
|
If DataListView.SelectedItem Is Nothing Then
|
|
SelectedProperty = ""
|
|
Else
|
|
SelectedProperty = DataListView.SelectedItem.Text
|
|
End If
|
|
|
|
'Reload
|
|
DataListView.Tag = ""
|
|
ShowSelectedNode
|
|
|
|
'Restore the selected property
|
|
If SelectedProperty <> "" Then
|
|
SelectProperty SelectedProperty
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub ErrorListView_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
|
|
|
|
If ErrorListView.SortKey = ColumnHeader.Index - 1 Then
|
|
'Reverse the sort order
|
|
If ErrorListView.SortOrder = lvwAscending Then
|
|
ErrorListView.SortOrder = lvwDescending
|
|
Else
|
|
ErrorListView.SortOrder = lvwAscending
|
|
End If
|
|
Else
|
|
'Sort ascending on this column
|
|
ErrorListView.SortOrder = lvwAscending
|
|
ErrorListView.SortKey = ColumnHeader.Index - 1
|
|
End If
|
|
|
|
' Resort
|
|
ErrorListView.Sorted = True
|
|
End Sub
|
|
|
|
Private Sub ErrorListView_DblClick()
|
|
If Not ErrorListView.SelectedItem Is Nothing Then
|
|
SelectKey ErrorListView.SelectedItem.Text
|
|
If ErrorListView.SelectedItem.SubItems(1) <> " 0" Then
|
|
SelectProperty ErrorListView.SelectedItem.SubItems(1)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub AddErrorToErrorListView(CheckError As Variant)
|
|
Dim NewItem As ListItem
|
|
Dim Key As String
|
|
Dim Property As Long
|
|
Dim Id As Long
|
|
Dim Severity As Long
|
|
Dim Description As String
|
|
|
|
Key = CheckError.Key
|
|
Property = CheckError.Property
|
|
Id = CheckError.Id
|
|
Severity = CheckError.Severity
|
|
Description = CheckError.Description
|
|
|
|
Set NewItem = ErrorListView.ListItems.Add
|
|
|
|
NewItem.Text = Key
|
|
NewItem.SubItems(1) = String(10 - Len(Str(Property)), " ") + Str(Property)
|
|
NewItem.SubItems(2) = String(10 - Len(Str(Id)), " ") + Str(Id)
|
|
NewItem.SubItems(3) = Str(Severity)
|
|
NewItem.SubItems(4) = Description
|
|
|
|
NewItem.SmallIcon = Severity
|
|
End Sub
|
|
|
|
Private Sub ExitMenuItem_Click()
|
|
Unload MainForm
|
|
End Sub
|
|
|
|
Private Function GenerateKeyName(ParentKey As String) As String
|
|
'Keep trying until we fail on a key lookup, then we know we have a unique name
|
|
On Error GoTo LError
|
|
|
|
Dim Name As String
|
|
Dim Num As Long
|
|
Dim Hit As Node
|
|
|
|
Num = 0
|
|
Do
|
|
Num = Num + 1
|
|
Name = "NewKey" & Str(Num)
|
|
Set Hit = KeyTreeView.Nodes(ParentKey & "\" & Name)
|
|
Loop
|
|
|
|
LError:
|
|
GenerateKeyName = Name
|
|
End Function
|
|
|
|
Private Sub NewKeyMenuItem_Click()
|
|
Dim NewName As String
|
|
Dim NewNode As Node
|
|
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Expand the parent
|
|
KeyTreeView.SelectedItem.Expanded = True
|
|
|
|
'Create it
|
|
NewName = GenerateKeyName(KeyTreeView.SelectedItem.FullPath)
|
|
Set NewNode = KeyTreeView.Nodes.Add(KeyTreeView.SelectedItem, tvwChild, KeyTreeView.SelectedItem.FullPath & "\" & NewName, NewName)
|
|
NewNode.Key = NewNode.FullPath
|
|
NewNode.Image = 1
|
|
NewNode.ExpandedImage = 2
|
|
'Set node as visited
|
|
NewNode.Tag = False
|
|
MetaUtilObj.CreateKey NewNode.FullPath
|
|
|
|
'Select It
|
|
Set KeyTreeView.SelectedItem = NewNode
|
|
DataListView.ListItems.Clear
|
|
|
|
'Edit it
|
|
KeyTreeView.StartLabelEdit
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "Rename Key"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub NewDwordMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Set the form parameters
|
|
SimpleEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
SimpleEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
SimpleEditForm.Id = 0
|
|
SimpleEditForm.NewDataType = DWORD_METADATA
|
|
|
|
'Run it
|
|
SimpleEditForm.Init
|
|
SimpleEditForm.Show vbModal, Me
|
|
|
|
'Refresh DataListView
|
|
RefreshData
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "New DWord"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub NewStringMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Set the form parameters
|
|
SimpleEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
SimpleEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
SimpleEditForm.Id = 0
|
|
SimpleEditForm.NewDataType = STRING_METADATA
|
|
|
|
'Run it
|
|
SimpleEditForm.Init
|
|
SimpleEditForm.Show vbModal, Me
|
|
|
|
'Refresh DataListView
|
|
RefreshData
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "New String"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub NewExpandStringMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Set the form parameters
|
|
SimpleEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
SimpleEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
SimpleEditForm.Id = 0
|
|
SimpleEditForm.NewDataType = EXPANDSZ_METADATA
|
|
|
|
'Run it
|
|
SimpleEditForm.Init
|
|
SimpleEditForm.Show vbModal, Me
|
|
|
|
'Refresh DataListView
|
|
RefreshData
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "New Expand String"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub NewBinaryMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Set the form parameters
|
|
SimpleEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
SimpleEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
SimpleEditForm.Id = 0
|
|
SimpleEditForm.NewDataType = BINARY_METADATA
|
|
|
|
'Run it
|
|
SimpleEditForm.Init
|
|
SimpleEditForm.Show vbModal, Me
|
|
|
|
'Refresh DataListView
|
|
RefreshData
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "New Expand String"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub NewMultiStringMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Set the form parameters
|
|
MultiEditForm.Machine = KeyTreeView.SelectedItem.Root.FullPath
|
|
MultiEditForm.Key = KeyTreeView.SelectedItem.FullPath
|
|
MultiEditForm.Id = 0
|
|
MultiEditForm.NewDataType = MULTISZ_METADATA
|
|
|
|
'Run it
|
|
MultiEditForm.Init
|
|
MultiEditForm.Show vbModal, Me
|
|
|
|
'Refresh DataListView
|
|
RefreshData
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "New Expand String"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub DeleteMenuItem_Click()
|
|
Dim Response As Long
|
|
|
|
If MainForm.ActiveControl Is KeyTreeView Then
|
|
Response = MsgBox("Are you sure you want to delete key " & KeyTreeView.SelectedItem.FullPath & "?", _
|
|
vbQuestion + vbYesNo, "Delete Key")
|
|
If Response = vbYes Then
|
|
MetaUtilObj.DeleteKey KeyTreeView.SelectedItem.FullPath
|
|
KeyTreeView.Nodes.Remove KeyTreeView.SelectedItem.Index
|
|
ShowSelectedNode
|
|
End If
|
|
ElseIf MainForm.ActiveControl Is DataListView Then
|
|
Response = MsgBox("Are you sure you want to delete property " & Trim(DataListView.SelectedItem.Text) & "?", _
|
|
vbQuestion + vbYesNo, "Delete Property")
|
|
If Response = vbYes Then
|
|
MetaUtilObj.DeleteProperty KeyTreeView.SelectedItem.FullPath, CLng(DataListView.SelectedItem.Text)
|
|
DataListView.Tag = ""
|
|
ShowSelectedNode
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub RenameKeyMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
KeyTreeView.StartLabelEdit
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "Rename Key"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CopyKeyMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
'Set the form parameters
|
|
CopyKeyForm.SourceKey = KeyTreeView.SelectedItem.FullPath
|
|
|
|
'Run it
|
|
CopyKeyForm.Init
|
|
CopyKeyForm.Show vbModal, Me
|
|
|
|
'Refresh DataListView
|
|
If CopyKeyForm.Moved Then
|
|
KeyTreeView.Nodes.Remove KeyTreeView.SelectedItem.Index
|
|
End If
|
|
RefreshKeys
|
|
RefreshData
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "Rename Key"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub FindMenuItem_Click()
|
|
FindForm.Show vbModal, Me
|
|
End Sub
|
|
|
|
Private Sub FindNextMenuItem_Click()
|
|
FindWorkingForm.Show vbModal, MainForm
|
|
End Sub
|
|
|
|
Private Sub CheckSchemaMenuItem_Click()
|
|
Dim CheckError As Variant
|
|
Dim NumErrors As Long
|
|
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
NumErrors = 0
|
|
|
|
'Set the cursor to hourglass
|
|
AppCursor = vbHourglass
|
|
MainForm.MousePointer = AppCursor
|
|
|
|
'Make sure the list is visible
|
|
If Not ErrorListView.Visible Then
|
|
ErrorListView.Visible = True
|
|
ErrorListMenuItem.Checked = True
|
|
LayoutForm
|
|
ErrorListView.Refresh
|
|
End If
|
|
|
|
'Clear the error list
|
|
ErrorListView.ListItems.Clear
|
|
|
|
'Add the errors to the list
|
|
For Each CheckError In MetaUtilObj.CheckSchema(KeyTreeView.SelectedItem.Root.FullPath)
|
|
AddErrorToErrorListView CheckError
|
|
NumErrors = NumErrors + 1
|
|
Next
|
|
|
|
'Resort
|
|
ErrorListView.Sorted = True
|
|
|
|
'Restore the cursor
|
|
AppCursor = vbDefault
|
|
MainForm.MousePointer = AppCursor
|
|
|
|
If NumErrors = 0 Then
|
|
MainStatusBar.SimpleText = "No errors found in schema."
|
|
Else
|
|
MainStatusBar.SimpleText = Str(NumErrors) & " errors found in schema."
|
|
End If
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "Check Schema"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CheckKeyMenuItem_Click()
|
|
Dim CheckError As Variant
|
|
Dim NumErrors As Long
|
|
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
NumErrors = 0
|
|
|
|
'Set the cursor to hourglass
|
|
AppCursor = vbHourglass
|
|
MainForm.MousePointer = AppCursor
|
|
|
|
'Make sure the list is visible
|
|
If Not ErrorListView.Visible Then
|
|
ErrorListView.Visible = True
|
|
ErrorListMenuItem.Checked = True
|
|
LayoutForm
|
|
End If
|
|
|
|
'Clear the error list
|
|
ErrorListView.ListItems.Clear
|
|
|
|
'Add the errors to the list
|
|
For Each CheckError In MetaUtilObj.CheckKey(KeyTreeView.SelectedItem.FullPath)
|
|
AddErrorToErrorListView CheckError
|
|
NumErrors = NumErrors + 1
|
|
Next
|
|
|
|
'Resort
|
|
ErrorListView.Sorted = True
|
|
|
|
'Display the number of errors in the status bar
|
|
If NumErrors = 0 Then
|
|
MainStatusBar.SimpleText = "No errors found in " & KeyTreeView.SelectedItem.FullPath & "."
|
|
Else
|
|
MainStatusBar.SimpleText = Str(NumErrors) & " errors found in " & KeyTreeView.SelectedItem.FullPath & "."
|
|
End If
|
|
|
|
'Restore the cursor
|
|
AppCursor = vbDefault
|
|
MainForm.MousePointer = AppCursor
|
|
Else
|
|
MsgBox "No key selected", vbOKOnly + vbExclamation, "Check Key"
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CheckAllMenuItem_Click()
|
|
Dim CheckError As Variant
|
|
Dim Key As Variant
|
|
Dim NumErrors As Long
|
|
|
|
NumErrors = 0
|
|
|
|
'Set the cursor to hourglass
|
|
AppCursor = vbHourglass
|
|
MainForm.MousePointer = AppCursor
|
|
|
|
'Make sure the list is visible
|
|
If Not ErrorListView.Visible Then
|
|
ErrorListView.Visible = True
|
|
ErrorListMenuItem.Checked = True
|
|
LayoutForm
|
|
End If
|
|
|
|
'Clear the error list
|
|
ErrorListView.ListItems.Clear
|
|
|
|
'Add the errors to the list
|
|
For Each Key In MetaUtilObj.EnumAllKeys("")
|
|
For Each CheckError In MetaUtilObj.CheckKey(Key)
|
|
AddErrorToErrorListView CheckError
|
|
NumErrors = NumErrors + 1
|
|
Next
|
|
Next
|
|
|
|
'Resort
|
|
ErrorListView.Sorted = True
|
|
|
|
'Display the number of errors in the status bar
|
|
If NumErrors = 0 Then
|
|
MainStatusBar.SimpleText = "No errors found outside of schema."
|
|
Else
|
|
MainStatusBar.SimpleText = Str(NumErrors) & " errors found outside of schema."
|
|
End If
|
|
|
|
'Restore the cursor
|
|
AppCursor = vbDefault
|
|
MainForm.MousePointer = AppCursor
|
|
End Sub
|
|
|
|
Private Sub CheckOptionsMenuItem_Click()
|
|
CheckOptionsForm.Init
|
|
CheckOptionsForm.Show vbModal, Me
|
|
End Sub
|
|
|
|
Private Sub ErrorListMenuItem_Click()
|
|
If ErrorListView.Visible Then
|
|
ErrorListView.Visible = False
|
|
ErrorListMenuItem.Checked = False
|
|
Else
|
|
ErrorListView.Visible = True
|
|
ErrorListMenuItem.Checked = True
|
|
End If
|
|
LayoutForm
|
|
End Sub
|
|
|
|
Private Sub StatusBarMenuItem_Click()
|
|
If MainStatusBar.Visible Then
|
|
Config.StatusBar = False
|
|
MainStatusBar.Visible = False
|
|
StatusBarMenuItem.Checked = False
|
|
Else
|
|
Config.StatusBar = True
|
|
MainStatusBar.Visible = True
|
|
StatusBarMenuItem.Checked = True
|
|
End If
|
|
LayoutForm
|
|
End Sub
|
|
|
|
Private Sub RefreshMenuItem_Click()
|
|
Dim SelectedControl As Control
|
|
Dim SelectedProperty As String
|
|
|
|
'Save the focus
|
|
Set SelectedControl = MainForm.ActiveControl
|
|
|
|
'Save the selected property
|
|
If DataListView.SelectedItem Is Nothing Then
|
|
SelectedProperty = ""
|
|
Else
|
|
SelectedProperty = DataListView.SelectedItem.Text
|
|
End If
|
|
|
|
'Reload
|
|
RefreshKeys
|
|
RefreshData
|
|
|
|
'Restore the selected property
|
|
If SelectedProperty <> "" Then
|
|
SelectProperty SelectedProperty
|
|
End If
|
|
|
|
'Restore original focus
|
|
If Not SelectedControl Is Nothing Then
|
|
SelectedControl.SetFocus
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub AboutMenuItem_Click()
|
|
Load AboutForm
|
|
AboutForm.Show vbModal, Me
|
|
End Sub
|
|
|
|
Private Sub ExpandKeyMenuItem_Click()
|
|
If Not KeyTreeView.SelectedItem Is Nothing Then
|
|
KeyTreeView.SelectedItem.Expanded = True
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub KeyNewKeyMenuItem_Click()
|
|
'Redirect
|
|
NewKeyMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyNewDwordMenuItem_Click()
|
|
'Redirect
|
|
NewDwordMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyNewStringMenuItem_Click()
|
|
'Redirect
|
|
NewStringMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyNewBinaryMenuItem_Click()
|
|
'Redirect
|
|
NewBinaryMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyNewExpandSzMenuItem_Click()
|
|
'Redirect
|
|
NewExpandStringMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyNewMultiSzMenuItem_Click()
|
|
'Redirect
|
|
NewMultiStringMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyDeleteMenuItem_Click()
|
|
'Redirect
|
|
DeleteMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyRenameMenuItem_Click()
|
|
'Redirect
|
|
RenameKeyMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyCopyMenuItem_Click()
|
|
'Redirect
|
|
CopyKeyMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub KeyCheckMenuItem_Click()
|
|
'Redirect
|
|
CheckKeyMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub DataModifyMenuItem_Click()
|
|
'Redirect
|
|
DataListView_DblClick
|
|
End Sub
|
|
|
|
Private Sub DataNewDwordMenuItem_Click()
|
|
'Redirect
|
|
NewDwordMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub DataNewStringMenuItem_Click()
|
|
'Redirect
|
|
NewStringMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub DataNewBinaryMenuItem_Click()
|
|
'Redirect
|
|
NewBinaryMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub DataNewExpandSzMenuItem_Click()
|
|
'Redirect
|
|
NewExpandStringMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub DataNewMultiSzMenuItem_Click()
|
|
'Redirect
|
|
NewMultiStringMenuItem_Click
|
|
End Sub
|
|
|
|
Private Sub DataDeleteMenuItem_Click()
|
|
'Redirect
|
|
DeleteMenuItem_Click
|
|
End Sub
|