Projects

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

javaSpy

Browsing frmWindowSpy.vb (14.59 KB)

Option Explicit On

Imports javaSpy.clsWindowObject

Public Class frmWindowSpy

    Private _parentWindow As clsWindowObject = Nothing
    Private _intTopLevel As Integer = 0
    Private _intTotal As Integer = 0

    Public Sub New(ByVal parentWindow As clsWindowObject)

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        _parentWindow = parentWindow

    End Sub

    Public Function windowEnumFunc(ByVal thisWindow As clsWindowObject) As Integer

        Dim newNode As TreeNode = tvSpy.Nodes.Add( _
            thisWindow.hWnd.ToString, _displayText(thisWindow))

        newNode.ContextMenuStrip = menuPopup
        newNode.Tag = thisWindow

        If thisWindow.Visible Then
            newNode.StateImageIndex = 0
        Else
            newNode.StateImageIndex = 1
        End If

        If Not (_parentWindow Is Nothing) AndAlso _
            _parentWindow.hWnd = thisWindow.hWnd Then

            newNode.EnsureVisible()
            tvSpy.SelectedNode = newNode

        End If

        _intTopLevel += 1
        _intTotal += 1

        clsWindowObject.BeginChildWindowEnum(thisWindow.hWnd, AddressOf windowEnumChildFunc)

        Return 1 ' continue enumeration

    End Function

    Public Function windowEnumChildFunc(ByVal thisWindow As clsWindowObject) As Integer

        Dim thisNode As TreeNode = tvSpy.Nodes(thisWindow.hWndParent.ToString)

        If Not (thisNode Is Nothing) Then

            Dim newNode As TreeNode = thisNode.Nodes.Add( _
                thisWindow.hWnd.ToString, _displayText(thisWindow))

            newNode.ContextMenuStrip = menuPopup
            newNode.Tag = thisWindow

            If thisWindow.Visible Then
                newNode.StateImageIndex = 0
            Else
                newNode.StateImageIndex = 1
            End If

            If Not (_parentWindow Is Nothing) AndAlso _
                _parentWindow.hWnd = thisWindow.hWnd Then

                newNode.EnsureVisible()
                tvSpy.SelectedNode = newNode

            End If

            _intTotal += 1

            windowFindWindowEnum(thisWindow, newNode)

        End If

        Return 1 ' continue enumeration

    End Function

    Public Sub windowFindWindowEnum(ByVal parentWindow As clsWindowObject, _
        ByVal parentNode As TreeNode)

        Dim childWindow As clsWindowObject = parentWindow.GetFirstChild()

        Do While childWindow.IsWindow

            Dim newNode As TreeNode = parentNode.Nodes.Add( _
                childWindow.hWnd.ToString, _displayText(childWindow))

            newNode.ContextMenuStrip = menuPopup
            newNode.Tag = childWindow

            If childWindow.Visible Then
                newNode.StateImageIndex = 0
            Else
                newNode.StateImageIndex = 1
            End If

            If Not (_parentWindow Is Nothing) AndAlso _
                _parentWindow.hWnd = childWindow.hWnd Then

                newNode.EnsureVisible()
                tvSpy.SelectedNode = newNode

            End If

            _intTotal += 1

            If childWindow.HasChildren Then

                ' recursive enum children
                windowFindWindowEnum(childWindow, newNode)

            End If

            childWindow = childWindow.GetNextSibling()

        Loop

    End Sub

    Private Function _displayText(ByVal thisWindow As clsWindowObject) As String

        If Not (thisWindow Is Nothing) AndAlso _
            thisWindow.IsWindow Then

            Return FormatHandle(thisWindow.hWnd) + _
                " """ + thisWindow.Text + """ " + _
                thisWindow.ClassName

        Else

            Return "[invalid window]"

        End If

    End Function

    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 frmWindowSpy_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        clsWindowObject.BeginWindowEnum(AddressOf windowEnumFunc)

    End Sub

    Private Sub frmWindowSpy_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown

        lblStatus.Text = _intTopLevel.ToString("###,##0") + " top level windows out of " + _
            _intTotal.ToString("###,##0") + " windows found"

    End Sub

    Private Sub frmWindowSpy_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) AndAlso _
            tvSpy.SelectedNode.GetNodeCount(False) = 0 Then _
            mnuProperties.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 mnuUnload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuUnload.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.Close()

    End Sub

    Private Sub mnuClick0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick0.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_DEFAULT)

    End Sub

    Private Sub mnuClick1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick1.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_LBTN_UP)

    End Sub

    Private Sub mnuClick2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick2.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_LBTN_DOWN)

    End Sub

    Private Sub mnuClick3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick3.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_LBTN_DBLCLICK)

    End Sub

    Private Sub mnuClick4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick4.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_RBTN_UP)

    End Sub

    Private Sub mnuClick5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick5.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_RBTN_DOWN)

    End Sub

    Private Sub mnuClick6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuClick6.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.ClickButton(ClickButtonMethods.BTN_RBTN_DBLCLICK)

    End Sub

    Private Sub mnuShowWindow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuShowWindow.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.WindowState = WindowStates.SW_SHOW

    End Sub

    Private Sub mnuHideWindow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuHideWindow.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.WindowState = WindowStates.SW_HIDE

    End Sub

    Private Sub mnuRestoreWindow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRestoreWindow.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.WindowState = WindowStates.SW_RESTORE

    End Sub

    Private Sub mnuEnableWindow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEnableWindow.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.Enabled = True

    End Sub

    Private Sub mnuDisableWindow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuDisableWindow.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.Enabled = False

    End Sub

    Private Sub mnuNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuNormal.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.WindowState = WindowStates.SW_NORMAL

    End Sub

    Private Sub mnuMinimized_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuMinimized.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.WindowState = WindowStates.SW_MINIMIZE

    End Sub

    Private Sub mnuMaximized_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuMaximized.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.WindowState = WindowStates.SW_MAXIMIZE

    End Sub

    Private Sub mnuTopTrue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuTopTrue.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.AlwaysOnTop = True

    End Sub

    Private Sub mnuTopFalse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuTopFalse.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        tvSpy.SelectedNode.Tag.AlwaysOnTop = False

    End Sub

    Private Sub mnuMenuSpy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuMenuSpy.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        _showWaitCursor(True)

        With New frmMenuSpy(tvSpy.SelectedNode.Tag)
            .Show(Me)
        End With

        _showWaitCursor(False)

    End Sub

    Private Sub mnuProcessSpy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuProcessSpy.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        _showWaitCursor(True)

        With New frmProcessSpy(tvSpy.SelectedNode.Tag)
            .Show(Me)
        End With

        _showWaitCursor(False)

    End Sub

    Private Sub mnuProperties_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuProperties.Click

        If tvSpy.SelectedNode.Tag Is Nothing Then Exit Sub

        _showWaitCursor(True)

        With New frmWindowProps(tvSpy.SelectedNode.Tag)
            .Show(Me)
        End With

        _showWaitCursor(False)

    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 = _displayText(tvSpy.SelectedNode.Tag)
        tvSpy.SelectedNode.Nodes.Clear()

        windowFindWindowEnum(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

        mnuMenuSpy.Enabled = tvSpy.SelectedNode.Tag.HasMenu

    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 frmWindowSpy.vb

Back to file list


Back to project page