Find all our projects in development below.
All source code is GNU General Public License (GPL)
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