public void SimulateMouseAction(ExtraMouse mouse) { StartSimulation(); Debug.WriteLineIf(DEBUG, string.Format("Simulating button: {0}, action: {1} position: ({2},{3})", mouse.Button, mouse.Action, mouse.Position.X, mouse.Position.Y)); mouse.SimulateMouseAction(); StopSimulation(); }
//public void SimulateHiddenAction(ExtraMouseActions action, Point pos) //{ // m_bSimimulate = true; // ExtraMouse.SimateHiddenClick(action, pos); // m_bSimimulate = false; //} public void SimulateMouseAction(ExtraMouseBtns button, ExtraMouseActions action) { StartSimulation(); Debug.WriteLineIf(DEBUG, string.Format("Simulating button: {0}, action: {1}", button, action)); ExtraMouse.SimulateMouseAction(button, action, m_LParam); StopSimulation(); }
public ExtraMouse(ExtraMouse mouse) { m_button = mouse.Button; m_action = mouse.Action; m_point = mouse.Position; m_clicks = mouse.Cliks; }
public void ForceUninstall() { Debug.WriteLineIf(DEBUG, "FORCE MANUAL UNINSTALL!"); Uninstall(m_bThreaded); m_cEnableHoldDownBtn.Stop(); StopMouseInactivityTimer(); m_mouseMode = MouseMode.None; m_mouseHoldDownBtn = null; m_mouseExecuteBtn = null; m_bShouldInstall = false; m_bShouldUninstall = false; }
public void SetHookValues(MouseButtons toggleBtn, bool classicCurve, bool doubleBtn, bool wheelBtn, int sensibleZone, int timeout, bool showTooltip, int toolTipInt) { m_cEnableHoldDownBtn.Interval = timeout; m_btnToggle = ExtraMouse.MouseBtnToExtraBtn(toggleBtn); m_bUsingClassicCurve = classicCurve; m_bUsingDoublebtn = doubleBtn; m_bUsingWheelBtn = wheelBtn; m_sensibleZone = sensibleZone; m_bShowToolTip = showTooltip; m_iToolTipInterval = toolTipInt; m_bUsingClassicCurveOnly = m_bUsingClassicCurve && !m_bUsingDoublebtn && !m_bUsingWheelBtn; }
/// <summary> /// Sends information to the system that mouse button is being pressed /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void m_cEnableHoldDownBtn_Tick(object sender, EventArgs e) { //OnHookStateChanged(false); m_cEnableHoldDownBtn.Stop(); Debug.WriteLineIf(DEBUG, "EnableTrigger_Tick Simulate Trigger button action"); //inform engine that some button was pushed so the context menu of recognized gestures might be hidden ExtraMouse tempMouse = new ExtraMouse(m_mouseHoldDownBtn); RaiseMouseEvent(tempMouse);// new ExtraMouse(ExtraMouseBtns.None, ExtraMouseActions.Down, m_mouseHoldDownBtn.Position)); if (!isEventCancelled()) { SimulateMouseAction(tempMouse); // action down } m_mouseHoldDownBtn = null; }
/// <summary> /// /// </summary> /// <param name="button"></param> /// <returns>True if button was released & event handled</returns> private bool CheckAndRelease(ExtraMouse button, IntPtr wParam) { if (button != null) { if (button.Action == ExtraMouseActions.Down) { if (wParam.ToInt32() == ExtraMouse.GetWmValue(button.Button, ExtraMouseActions.Up)) { Debug.WriteLineIf(DEBUG, string.Format("Button {0} Uninstalled", button.Button)); //button = null; return(true); } } else { Debug.WriteLineIf(DEBUG, string.Format("Button {0} Uninstalled", button.Button)); //button = null; return(true); } } return(false); }
private void RaiseMouseEvent(ExtraMouse mouse) { if (mouse.Action != ExtraMouseActions.Move) { Debug.WriteLineIf(DEBUG, string.Format("RaiseMouseEvent button: {0}, action {1}", mouse.Button, mouse.Action)); } MouseEventArgs args = mouse.ToMouseEvent(); if (mouse.Button == ExtraMouseBtns.Wheel) { OnMouseWheel(args); } else { switch (mouse.Action) { case ExtraMouseActions.Down: OnMouseDown(args); break; case ExtraMouseActions.Click: OnMouseClick(args); break; case ExtraMouseActions.Up: OnMouseUp(args); break; case ExtraMouseActions.DoubleClick: OnMouseDoubleClick(args); break; case ExtraMouseActions.Move: OnMouseMove(args); break; } } }
private bool HandleEvent(int code, IntPtr wParam, IntPtr lParam) { //Debug.WriteLineIf(DEBUG, string.Format("Code: {0} wParam: {1} lParam: {2}", code, wParam, lParam)); ExtraMouse mouseEvent = new ExtraMouse(wParam, lParam); switch (mouseEvent.Action) { case ExtraMouseActions.Down: Debug.WriteLineIf(DEBUG, string.Format("{0} button _DOWN_ X: {1} Y: {2}", mouseEvent.Button, mouseEvent.Position.X, mouseEvent.Position.Y)); if (m_mouseMode == MouseMode.Toggle || m_mouseMode == MouseMode.WheelBtn) { return(false); } if (m_bUsingClassicCurveOnly && mouseEvent.Button != m_btnToggle) { break; //raise event } if (m_mouseHoldDownBtn == null) { m_mouseHoldDownBtn = mouseEvent; m_cEnableHoldDownBtn.Start(); return(true); } else { if (!m_bUsingDoublebtn) { return(false); } //m_wndUnderCursor = GetWndUnderCursor.FromPoint(mouseEvent.Position); m_mouseMode = MouseMode.DoubleBtn; // second button has not been pushed yet if (m_mouseExecuteBtn == null) { m_cEnableHoldDownBtn.Stop(); m_mouseExecuteBtn = mouseEvent; Debug.WriteLineIf(DEBUG, "Start Timer OnDoubleBtnAction Notify Only"); RestartMouseInactivityTimer(); //OnDoubleBtnAction(m_mouseTrigger.ToMouseEvent(), m_mouseModifier.ToMouseEvent(), true); return(true); } // second button was already released, use it again else if (m_mouseExecuteBtn.Action == ExtraMouseActions.Up) { m_mouseExecuteBtn = mouseEvent; Debug.WriteLineIf(DEBUG, "Start Timer OnDoubleBtnAction Notify Only"); RestartMouseInactivityTimer(); //OnDoubleBtnAction(m_mouseTrigger.ToMouseEvent(), m_mouseModifier.ToMouseEvent(), true); return(true); } } break; case ExtraMouseActions.Up: Debug.WriteLineIf(DEBUG, string.Format("{0} button ^UP^ X: {1} Y: {2}", mouseEvent.Button, mouseEvent.Position.X, mouseEvent.Position.Y)); if (m_mouseMode == MouseMode.Toggle && m_mouseHoldDownBtn.Button == mouseEvent.Button) { m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; StopMouseInactivityTimer(); //SimulateHiddenAction(ExtraMouseActions.Up, mouseEvent.Position); RaiseMouseEvent(mouseEvent); return(true); } else if (m_mouseMode == MouseMode.WheelBtn && m_mouseHoldDownBtn.Button == mouseEvent.Button) { Debug.WriteLineIf(DEBUG, "Raise OnWheelBtnAction - Hold-down button released"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), ExtraMouseActions.None); m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; return(true); } //raise event... if (m_mouseHoldDownBtn == null) { RaiseMouseEvent(mouseEvent); if (isEventCancelled()) { return(true); } else { return(false); } } if (m_mouseHoldDownBtn.Button == mouseEvent.Button) { StopMouseInactivityTimer(); m_cEnableHoldDownBtn.Stop(); if (m_mouseExecuteBtn == null) { // mouse click action is raised lock (this) { //RaiseMouseEvent(m_mouseTrigger); //action down //SimulateMouseAction(m_mouseTrigger); //RaiseMouseEvent(mouseEvent); //action up //SimulateMouseAction(mouseEvent.Button, ExtraMouseActions.Click); RaiseMouseEvent(new ExtraMouse(m_mouseHoldDownBtn.Button, ExtraMouseActions.Click, m_mouseHoldDownBtn.Position)); if (!isEventCancelled()) { SimulateMouseAction(mouseEvent.Button, ExtraMouseActions.Down); System.Threading.Thread.Sleep(10); SimulateMouseAction(mouseEvent.Button, ExtraMouseActions.Up); } } m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; return(true); } else if (m_mouseExecuteBtn.Action == ExtraMouseActions.Down) { Debug.WriteLineIf(DEBUG, "Trigger ^UP^ & Modifier _DOWN_ => Swap MODIFIER & TRIGGER"); m_mouseHoldDownBtn = m_mouseExecuteBtn; m_mouseExecuteBtn = mouseEvent; //m_mouseMode = MouseMode.DoubleBtn; return(true); } else { m_mouseExecuteBtn = null; m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; return(true); } } else if (m_mouseExecuteBtn != null) { if (m_mouseExecuteBtn.Button == mouseEvent.Button) { StopMouseInactivityTimer(); m_mouseExecuteBtn = mouseEvent; if (m_mouseHoldDownBtn != null) { //m_wndUnderCursor = GetWndUnderCursor.FromPoint(mouseEvent.Position); Debug.WriteLineIf(DEBUG, "Raise OnDoubleBtnAction"); OnDoubleBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), m_mouseExecuteBtn.ToMouseEvent(), false); //m_mouseModifier = null; return(true); } } } break; case ExtraMouseActions.WheelDown: case ExtraMouseActions.WheelUp: if (!m_bUsingWheelBtn) { return(false); } if (m_mouseHoldDownBtn != null && m_mouseMode == MouseMode.None) { m_mouseMode = MouseMode.WheelBtn; m_cEnableHoldDownBtn.Stop(); //m_wndUnderCursor = GetWndUnderCursor.FromPoint(m_mouseTrigger.Position); Debug.WriteLineIf(DEBUG, "Raise OnWheelBtnAction"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), mouseEvent.Action); return(true); } else if (m_mouseMode == MouseMode.WheelBtn) { Debug.WriteLineIf(DEBUG, "Raise OnWheelBtnAction"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), mouseEvent.Action); return(true); } break; case ExtraMouseActions.Move: if (m_mouseHoldDownBtn != null && m_mouseMode == MouseMode.None) { if (IsDistanceLessThan(m_mouseHoldDownBtn.Position, mouseEvent.Position, m_sensibleZone)) { return(false); } if (m_mouseHoldDownBtn.Button == m_btnToggle && m_bUsingClassicCurve) { m_mouseMode = MouseMode.Toggle; m_cEnableHoldDownBtn.Stop(); Debug.WriteLineIf(DEBUG, "Mouse start moving & ToggleBtn _DOWN_ => RaiseMouseHookEvent()"); OnMouseDownGesture(m_mouseHoldDownBtn.ToMouseEvent()); StartMouseInactivityTimer(); //m_wndUnderCursor = GetWndUnderCursor.FromPoint(m_mouseTrigger.Position); //SimulateHiddenAction(ExtraMouseActions.Down, m_mouseTrigger.Position); //return true; } else { m_mouseMode = MouseMode.None; m_cEnableHoldDownBtn.Stop(); ExtraMouse mouseTemp = new ExtraMouse(m_mouseHoldDownBtn); //backup mouse trigger so it can be changed during this process RaiseMouseEvent(mouseTemp); if (!isEventCancelled()) { SimulateMouseAction(mouseTemp); } m_mouseHoldDownBtn = null; } } else if (m_mouseMode == MouseMode.Toggle) { m_pCurrentPosition = mouseEvent.Position; } break; } if (code == Win32.HC_ACTION) { RaiseMouseEvent(mouseEvent); } return(false); }
private void RaiseMouseEvent(ExtraMouse mouse) { if (mouse.Action != ExtraMouseActions.Move) Debug.WriteLineIf(DEBUG, string.Format("RaiseMouseEvent button: {0}, action {1}", mouse.Button, mouse.Action)); MouseEventArgs args = mouse.ToMouseEvent(); if (mouse.Button == ExtraMouseBtns.Wheel) { OnMouseWheel(args); } else { switch (mouse.Action) { case ExtraMouseActions.Down: OnMouseDown(args); break; case ExtraMouseActions.Click: OnMouseClick(args); break; case ExtraMouseActions.Up: OnMouseUp(args); break; case ExtraMouseActions.DoubleClick: OnMouseDoubleClick(args); break; case ExtraMouseActions.Move: OnMouseMove(args); break; } } }
/// <summary> /// Sends information to the system that mouse button is being pressed /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void m_cEnableHoldDownBtn_Tick(object sender, EventArgs e) { //OnHookStateChanged(false); m_cEnableHoldDownBtn.Stop(); Debug.WriteLineIf(DEBUG, "EnableTrigger_Tick Simulate Trigger button action"); //inform engine that some button was pushed so the context menu of recognized gestures might be hidden ExtraMouse tempMouse = new ExtraMouse(m_mouseHoldDownBtn); RaiseMouseEvent(tempMouse);// new ExtraMouse(ExtraMouseBtns.None, ExtraMouseActions.Down, m_mouseHoldDownBtn.Position)); if (!isEventCancelled()) SimulateMouseAction(tempMouse); // action down m_mouseHoldDownBtn = null; }
private bool HandleEvent(int code, IntPtr wParam, IntPtr lParam) { //Debug.WriteLineIf(DEBUG, string.Format("Code: {0} wParam: {1} lParam: {2}", code, wParam, lParam)); ExtraMouse mouseEvent = new ExtraMouse(wParam, lParam); switch (mouseEvent.Action) { case ExtraMouseActions.Down: Debug.WriteLineIf(DEBUG, string.Format("{0} button _DOWN_ X: {1} Y: {2}", mouseEvent.Button, mouseEvent.Position.X, mouseEvent.Position.Y)); if (m_mouseMode == MouseMode.Toggle || m_mouseMode == MouseMode.WheelBtn) return false; if (m_bUsingClassicCurveOnly && mouseEvent.Button != m_btnToggle) break; //raise event if (m_mouseHoldDownBtn == null) { m_mouseHoldDownBtn = mouseEvent; m_cEnableHoldDownBtn.Start(); return true; } else { if (!m_bUsingDoublebtn) return false; //m_wndUnderCursor = GetWndUnderCursor.FromPoint(mouseEvent.Position); m_mouseMode = MouseMode.DoubleBtn; // second button has not been pushed yet if (m_mouseExecuteBtn == null) { m_cEnableHoldDownBtn.Stop(); m_mouseExecuteBtn = mouseEvent; Debug.WriteLineIf(DEBUG, "Start Timer OnDoubleBtnAction Notify Only"); RestartMouseInactivityTimer(); //OnDoubleBtnAction(m_mouseTrigger.ToMouseEvent(), m_mouseModifier.ToMouseEvent(), true); return true; } // second button was already released, use it again else if (m_mouseExecuteBtn.Action == ExtraMouseActions.Up) { m_mouseExecuteBtn = mouseEvent; Debug.WriteLineIf(DEBUG, "Start Timer OnDoubleBtnAction Notify Only"); RestartMouseInactivityTimer(); //OnDoubleBtnAction(m_mouseTrigger.ToMouseEvent(), m_mouseModifier.ToMouseEvent(), true); return true; } } break; case ExtraMouseActions.Up: Debug.WriteLineIf(DEBUG, string.Format("{0} button ^UP^ X: {1} Y: {2}", mouseEvent.Button, mouseEvent.Position.X, mouseEvent.Position.Y)); if (m_mouseMode == MouseMode.Toggle && m_mouseHoldDownBtn.Button == mouseEvent.Button) { m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; StopMouseInactivityTimer(); //SimulateHiddenAction(ExtraMouseActions.Up, mouseEvent.Position); RaiseMouseEvent(mouseEvent); return true; } else if (m_mouseMode == MouseMode.WheelBtn && m_mouseHoldDownBtn.Button == mouseEvent.Button) { Debug.WriteLineIf(DEBUG, "Raise OnWheelBtnAction - Hold-down button released"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), ExtraMouseActions.None); m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; return true; } //raise event... if (m_mouseHoldDownBtn == null) { RaiseMouseEvent(mouseEvent); if (isEventCancelled()) return true; else return false; } if (m_mouseHoldDownBtn.Button == mouseEvent.Button) { StopMouseInactivityTimer(); m_cEnableHoldDownBtn.Stop(); if (m_mouseExecuteBtn == null) { // mouse click action is raised lock (this) { //RaiseMouseEvent(m_mouseTrigger); //action down //SimulateMouseAction(m_mouseTrigger); //RaiseMouseEvent(mouseEvent); //action up //SimulateMouseAction(mouseEvent.Button, ExtraMouseActions.Click); RaiseMouseEvent(new ExtraMouse(m_mouseHoldDownBtn.Button, ExtraMouseActions.Click, m_mouseHoldDownBtn.Position)); if (!isEventCancelled()) { SimulateMouseAction(mouseEvent.Button, ExtraMouseActions.Down); System.Threading.Thread.Sleep(10); SimulateMouseAction(mouseEvent.Button, ExtraMouseActions.Up); } } m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; return true; } else if (m_mouseExecuteBtn.Action == ExtraMouseActions.Down) { Debug.WriteLineIf(DEBUG, "Trigger ^UP^ & Modifier _DOWN_ => Swap MODIFIER & TRIGGER"); m_mouseHoldDownBtn = m_mouseExecuteBtn; m_mouseExecuteBtn = mouseEvent; //m_mouseMode = MouseMode.DoubleBtn; return true; } else { m_mouseExecuteBtn = null; m_mouseHoldDownBtn = null; m_mouseMode = MouseMode.None; return true; } } else if (m_mouseExecuteBtn != null) { if (m_mouseExecuteBtn.Button == mouseEvent.Button) { StopMouseInactivityTimer(); m_mouseExecuteBtn = mouseEvent; if (m_mouseHoldDownBtn != null) { //m_wndUnderCursor = GetWndUnderCursor.FromPoint(mouseEvent.Position); Debug.WriteLineIf(DEBUG, "Raise OnDoubleBtnAction"); OnDoubleBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), m_mouseExecuteBtn.ToMouseEvent(), false); //m_mouseModifier = null; return true; } } } break; case ExtraMouseActions.WheelDown: case ExtraMouseActions.WheelUp: if (!m_bUsingWheelBtn) return false; if (m_mouseHoldDownBtn != null && m_mouseMode == MouseMode.None) { m_mouseMode = MouseMode.WheelBtn; m_cEnableHoldDownBtn.Stop(); //m_wndUnderCursor = GetWndUnderCursor.FromPoint(m_mouseTrigger.Position); Debug.WriteLineIf(DEBUG, "Raise OnWheelBtnAction"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), mouseEvent.Action); return true; } else if (m_mouseMode == MouseMode.WheelBtn) { Debug.WriteLineIf(DEBUG, "Raise OnWheelBtnAction"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), mouseEvent.Action); return true; } break; case ExtraMouseActions.Move: if (m_mouseHoldDownBtn != null && m_mouseMode == MouseMode.None) { if (IsDistanceLessThan(m_mouseHoldDownBtn.Position, mouseEvent.Position, m_sensibleZone)) return false; if (m_mouseHoldDownBtn.Button == m_btnToggle && m_bUsingClassicCurve) { m_mouseMode = MouseMode.Toggle; m_cEnableHoldDownBtn.Stop(); Debug.WriteLineIf(DEBUG, "Mouse start moving & ToggleBtn _DOWN_ => RaiseMouseHookEvent()"); OnMouseDownGesture(m_mouseHoldDownBtn.ToMouseEvent()); StartMouseInactivityTimer(); //m_wndUnderCursor = GetWndUnderCursor.FromPoint(m_mouseTrigger.Position); //SimulateHiddenAction(ExtraMouseActions.Down, m_mouseTrigger.Position); //return true; } else { m_mouseMode = MouseMode.None; m_cEnableHoldDownBtn.Stop(); ExtraMouse mouseTemp = new ExtraMouse(m_mouseHoldDownBtn); //backup mouse trigger so it can be changed during this process RaiseMouseEvent(mouseTemp); if (!isEventCancelled()) SimulateMouseAction(mouseTemp); m_mouseHoldDownBtn = null; } } else if (m_mouseMode == MouseMode.Toggle) { m_pCurrentPosition = mouseEvent.Position; } break; } if (code == Win32.HC_ACTION) RaiseMouseEvent(mouseEvent); return false; }
/// <summary> /// /// </summary> /// <param name="button"></param> /// <returns>True if button was released & event handled</returns> private bool CheckAndRelease(ExtraMouse button, IntPtr wParam) { if (button != null) { if (button.Action == ExtraMouseActions.Down) { if (wParam.ToInt32() == ExtraMouse.GetWmValue(button.Button, ExtraMouseActions.Up)) { Debug.WriteLineIf(DEBUG, string.Format("Button {0} Uninstalled", button.Button)); //button = null; return true; } } else { Debug.WriteLineIf(DEBUG, string.Format("Button {0} Uninstalled", button.Button)); //button = null; return true; } } return false; }
/// <summary> /// The callback passed to SetWindowsHookEx /// </summary> /// <param name="code">The action code passed from the hook chain</param> /// <param name="wParam">The mouse message being received</param> /// <param name="lParam">Message paramters</param> /// <returns>return code to hook chain</returns> protected int MouseProc(int code, IntPtr wParam, IntPtr lParam) { // by convention a code < 0 means skip if (code < 0) { return(CallNextHookEx(m_hhook, code, wParam, lParam)); } // Yield to the next hook in the chain // used in m_cEnableModdifier_Tick m_LParam = lParam; if (m_iSimulateCount == 0 && !m_bShouldUninstall && !m_bCrossMode) { bool handled = HandleEvent(code, wParam, lParam); if (handled) { return(1); } } if (m_bCrossMode) { Win32.MouseLLHookStruct mouse = (Win32.MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32.MouseLLHookStruct)); m_pCrossPosition = new Point(mouse.pt.x, mouse.pt.y); if (wParam.ToInt32() == Win32.WM_LBUTTONUP) { OnCrossLeftMouseUp(); //StopCrossMode(); } } // if uninstall is called and mouse button is still pressed, then wait until it is released if (m_bShouldUninstall) { if (m_mouseHoldDownBtn != null) { if (CheckAndRelease(m_mouseHoldDownBtn, wParam)) { if (m_mouseMode == MouseMode.WheelBtn) { //necessary to release some pushed buttons... Debug.WriteLineIf(DEBUG, "Raise OnMouseTabWheel"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), ExtraMouseActions.None); } m_mouseHoldDownBtn = null; TryUninstall(); return(1); } } if (m_mouseExecuteBtn != null) { if (CheckAndRelease(m_mouseExecuteBtn, wParam)) { m_mouseExecuteBtn = null; TryUninstall(); return(1); } } } // pass information about mouse activity to other programs in a the system for further processing return(CallNextHookEx(m_hhook, code, wParam, lParam)); }
/// <summary> /// The callback passed to SetWindowsHookEx /// </summary> /// <param name="code">The action code passed from the hook chain</param> /// <param name="wParam">The mouse message being received</param> /// <param name="lParam">Message paramters</param> /// <returns>return code to hook chain</returns> protected int MouseProc(int code, IntPtr wParam, IntPtr lParam) { // by convention a code < 0 means skip if (code < 0) return CallNextHookEx(m_hhook, code, wParam, lParam); // Yield to the next hook in the chain // used in m_cEnableModdifier_Tick m_LParam = lParam; if (m_iSimulateCount == 0 && !m_bShouldUninstall && !m_bCrossMode) { bool handled = HandleEvent(code, wParam, lParam); if (handled) return 1; } if (m_bCrossMode) { Win32.MouseLLHookStruct mouse = (Win32.MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(Win32.MouseLLHookStruct)); m_pCrossPosition = new Point(mouse.pt.x, mouse.pt.y); if (wParam.ToInt32() == Win32.WM_LBUTTONUP) { OnCrossLeftMouseUp(); //StopCrossMode(); } } // if uninstall is called and mouse button is still pressed, then wait until it is released if (m_bShouldUninstall) { if (m_mouseHoldDownBtn != null) { if (CheckAndRelease(m_mouseHoldDownBtn, wParam)) { if (m_mouseMode == MouseMode.WheelBtn) { //necessary to release some pushed buttons... Debug.WriteLineIf(DEBUG, "Raise OnMouseTabWheel"); OnWheelBtnAction(m_mouseHoldDownBtn.ToMouseEvent(), ExtraMouseActions.None); } m_mouseHoldDownBtn = null; TryUninstall(); return 1; } } if (m_mouseExecuteBtn != null) { if (CheckAndRelease(m_mouseExecuteBtn, wParam)) { m_mouseExecuteBtn = null; TryUninstall(); return 1; } } } // pass information about mouse activity to other programs in a the system for further processing return CallNextHookEx(m_hhook, code, wParam, lParam); }