Projects

Find all our projects in development below.
All source code is GNU General Public License (GPL)

javaSpy

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

Download frmMenuSpy.vb

Back to file list


Back to project page