Find all our projects in development below.
All source code is GNU General Public License (GPL)
Browsing frmMenuSpy.vb (8.89 KB)
Option Explicit On
Public Class frmMenuSpy
Private _thisWnd As clsWindowObject = Nothing
Private _thisMenu As clsMenuObject = Nothing
Private _intTopLevel As Integer = 0
Private _intTotal As Integer = 0
Public Sub New(ByVal objWindow As clsWindowObject)
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
_thisWnd = objWindow
_thisMenu = New clsMenuObject(_thisWnd)
End Sub
Private Sub EnumMenuItems(ByVal thisMenu As clsMenuObject, _
Optional ByVal parentNode As TreeNode = Nothing)
Dim newNode As TreeNode = Nothing
For i As Integer = 0 To thisMenu.ChildCount - 1
Dim childMenu As clsMenuObject = thisMenu.GetChildMenu(i)
If parentNode Is Nothing Then
newNode = tvSpy.Nodes.Add( _
childMenu.hMenu.ToString, _
childMenu.Text)
Else
newNode = parentNode.Nodes.Add( _
childMenu.hMenu.ToString, _
childMenu.Text)
End If
newNode.ContextMenuStrip = menuPopup
newNode.Tag = childMenu
If Not childMenu.IsSeparator Or _
childMenu.IsTopLevel Then
If childMenu.Enabled Then
newNode.StateImageIndex = 0
Else
newNode.StateImageIndex = 1
End If
End If
If parentNode Is Nothing Then _intTopLevel += 1
_intTotal += 1
If childMenu.ChildCount > 0 Then _
EnumMenuItems(childMenu, newNode)
Next
If tvSpy.GetNodeCount(False) = 0 Then _
tvSpy.Nodes.Add("[no menu items found]")
End Sub
Private Function _findNodeText(ByVal nodeText As String, _
Optional ByVal nodeParent As TreeNode = Nothing) As TreeNode
Dim nodeRet As TreeNode = Nothing
Dim nodeList As TreeNodeCollection = Nothing
If nodeParent Is Nothing Then
nodeList = tvSpy.Nodes
Else
nodeList = nodeParent.Nodes
End If
Dim bIgnoreNodes As Boolean = nodeList.Contains(tvSpy.SelectedNode)
For Each thisNode As TreeNode In nodeList
If Not bIgnoreNodes Then
If thisNode.Text.Contains(nodeText) Then
nodeRet = thisNode
Exit For
End If
If thisNode.GetNodeCount(False) > 0 Then
nodeRet = _findNodeText(nodeText, thisNode)
If Not (nodeRet Is Nothing) Then Exit For
End If
End If
If bIgnoreNodes AndAlso _
thisNode.Equals(tvSpy.SelectedNode) Then _
bIgnoreNodes = False
Next ' thisNode
Return nodeRet
End Function
Private Sub _showWaitCursor(ByVal bShow As Boolean)
' show/hide the hourglass
If bShow Then
Me.Cursor = Cursors.WaitCursor
Me.UseWaitCursor = True
Else
Me.UseWaitCursor = False
Me.Cursor = Cursors.Arrow
End If
End Sub
Private Sub frmMenuSpy_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Text += FormatHandle(_thisWnd.hWnd)
EnumMenuItems(_thisMenu)
End Sub
Private Sub frmMenuSpy_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
lblStatus.Text = _intTopLevel.ToString("###,##0") + " top level menus out of " + _
_intTotal.ToString("###,##0") + " menus found"
End Sub
Private Sub frmMenuSpy_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
ssMain.ShowItemToolTips = Not (Me.WindowState = FormWindowState.Maximized)
End Sub
Private Sub tvSpy_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvSpy.DoubleClick
Dim objHitTest As TreeViewHitTestInfo = tvSpy.HitTest( _
tvSpy.PointToClient(Control.MousePosition))
If tvSpy.SelectedNode.Equals(objHitTest.Node) And _
tvSpy.SelectedNode.GetNodeCount(False) = 0 Then _
mnuClick.PerformClick()
End Sub
Private Sub tvSpy_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles tvSpy.KeyUp
If e.KeyCode = Keys.F3 Then lblFind_Click(sender, Nothing)
End Sub
Private Sub tvSpy_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvSpy.NodeMouseClick
If (e.Button = Windows.Forms.MouseButtons.Left And _
SystemInformation.MouseButtonsSwapped) Or _
(e.Button = Windows.Forms.MouseButtons.Right And _
Not SystemInformation.MouseButtonsSwapped) Then
tvSpy.SelectedNode = e.Node
End If
End Sub
Private Sub mnuClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick.Click
If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub
If Not (tvSpy.SelectedNode.Tag Is Nothing) Then _
tvSpy.SelectedNode.Tag.ClickItem()
End Sub
Private Sub mnuEnable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEnable.Click
If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub
mnuEnable.Checked = Not mnuEnable.Checked
tvSpy.SelectedNode.Tag.Enabled = mnuEnable.Checked
If tvSpy.SelectedNode.Tag.Enabled Then
tvSpy.SelectedNode.StateImageIndex = 0
Else
tvSpy.SelectedNode.StateImageIndex = 1
End If
End Sub
Private Sub mnuCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCheck.Click
If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub
mnuCheck.Checked = Not mnuCheck.Checked
tvSpy.SelectedNode.Tag.Checked = mnuCheck.Checked
End Sub
Private Sub mnuEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEdit.Click
If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub
Dim editDlg As New clsEditDialog(Me)
editDlg.InputText = tvSpy.SelectedNode.Tag.Text
editDlg.Show("Edit Menu Text")
If Not editDlg.Aborted Then
tvSpy.SelectedNode.Text = editDlg.OutputText
tvSpy.SelectedNode.Tag.Text = editDlg.OutputText
End If
End Sub
Private Sub mnuReload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuReload.Click
If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub
tvSpy.SelectedNode.Text = tvSpy.SelectedNode.Tag.Text
tvSpy.SelectedNode.Nodes.Clear()
EnumMenuItems(tvSpy.SelectedNode.Tag, tvSpy.SelectedNode)
End Sub
Private Sub menuPopup_Opened(ByVal sender As Object, ByVal e As System.EventArgs) Handles menuPopup.Opened
If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub
mnuEnable.Checked = tvSpy.SelectedNode.Tag.Enabled
mnuCheck.Checked = tvSpy.SelectedNode.Tag.Checked
mnuClick.Enabled = True
mnuEnable.Enabled = True
mnuCheck.Enabled = True
mnuEdit.Enabled = True
If tvSpy.SelectedNode.Tag.IsTopLevel Then
mnuClick.Enabled = False
ElseIf tvSpy.SelectedNode.Tag.IsSeparator Then
mnuClick.Enabled = False
mnuEnable.Enabled = False
mnuCheck.Enabled = False
mnuEdit.Enabled = False
End If
End Sub
Private Sub lblFind_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblFind.Click
Static lastFindText As String = ""
Dim findText As String = ""
If e Is Nothing And lastFindText <> "" Then
findText = lastFindText
Else
findText = InputBox("Enter the text to find:", Application.ProductName, lastFindText)
End If
If findText <> "" Then
Dim startNode As TreeNode = tvSpy.SelectedNode.Parent
_showWaitCursor(True)
Dim findNode As TreeNode = _findNodeText(findText, startNode)
_showWaitCursor(False)
If Not (findNode Is Nothing) Then
findNode.EnsureVisible()
tvSpy.SelectedNode = findNode
Else
MessageBox.Show("Cannot find """ + findText + """", Application.ProductName, _
MessageBoxButtons.OK, MessageBoxIcon.Information)
findText = ""
End If
End If
lastFindText = findText
End Sub
End Class