} //end GetClassName /// <summary> /// Captures or releases the mouse /// </summary> /// <param name="captured"></param> private void CaptureMouse(bool captured) { // if we're supposed to capture the window if (captured) { // capture the mouse movements and send them to ourself User32.SetCapture(this.Handle); // set the mouse cursor to our finder cursor Cursor.Current = _cursorFinder; // change the image to the finder gone image m_picFinder.Image = _finderGone; } //end if // otherwise we're supposed to release the mouse capture else { // so release it User32.ReleaseCapture(); // put the default cursor back Cursor.Current = _cursorDefault; // change the image back to the finder at home image m_picFinder.Image = _finderHome; // and finally refresh any window that we were highlighting if (_hPreviousWindow != IntPtr.Zero) { WindowHighlighter.Refresh(_hPreviousWindow); _hPreviousWindow = IntPtr.Zero; } //end if } //end else // save our capturing state _capturing = captured; } //end CaptureMouse
} //end CaptureMouse /// <summary> /// Handles all mouse move messages sent to the Spy Window /// </summary> private void HandleMouseMovements() { // if we're not capturing, then bail out if (!_capturing) { return; } try { // capture the window under the cursor's position _hCurrentWindow = User32.WindowFromPoint(Cursor.Position); // if the window we're over, is not the same as the one before, and we had one before, refresh it if (_hPreviousWindow != IntPtr.Zero && _hPreviousWindow != _hCurrentWindow) { WindowHighlighter.Refresh(_hPreviousWindow); } // if we didn't find a window.. that's pretty hard to imagine. lol if (_hCurrentWindow == IntPtr.Zero) { m_txtHandle.Text = ""; m_txtClass.Text = ""; m_txtCaption.Text = ""; m_txtStyle.Text = ""; m_txtRect.Text = ""; } //end if else { // save the window we're over _hPreviousWindow = _hCurrentWindow; m_txtProcess.Text = GetProcessPath(_hCurrentWindow); m_txtHandle.Text = string.Format("{0}", _hCurrentWindow.ToInt32().ToString()); m_txtClass.Text = this.GetClassName(_hCurrentWindow); m_txtCaption.Text = User32.GetWindowText(_hCurrentWindow); if (m_txtClass.Text == "Edit" || m_txtCaption.Text == "") { m_txtCaption.Text = User32.GetText(_hCurrentWindow); } //end if User32.GetWindowRect(_hCurrentWindow, out User32.RECT rc); User32EnumChildWindows.EnumChildWindows(_hCurrentWindow, m_txtCaption.Text); // rect m_txtRect.Text = string.Format( "[{0} x {1}], ({2})", rc.Right - rc.Left, rc.Bottom - rc.Top, rc.ToString()); // highlight the window WindowHighlighter.Highlight(_hCurrentWindow); } //end else } //end try catch (Exception err) { Debug.WriteLine("HandleMouseMovements: " + err); FormClipboard.TraceLn(false, "FormSpyWindow", "HandleMouseMovements", "Error: {0}", err.Message); } //end catch } //end HandleMouseMovements