/// <summary> /// /// </summary> /// <param name="nCode"></param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <returns></returns> private int MouseHookProc(int nCode, int wParam, IntPtr lParam) { if (nCode >= 0) { MouseHookStruct mouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); MouseButtons button = MouseButtons.None; short mouseDelta = 0; int clickCount = 0; bool mouseDown = false; bool mouseUp = false; switch (wParam) { case (int)WindowsMessage.WM_LBUTTONDOWN: mouseDown = true; button = MouseButtons.Left; clickCount = 1; break; case (int)WindowsMessage.WM_LBUTTONUP: mouseUp = true; button = MouseButtons.Left; clickCount = 1; break; case (int)WindowsMessage.WM_LBUTTONDBLCLK: button = MouseButtons.Left; clickCount = 2; break; case (int)WindowsMessage.WM_RBUTTONDOWN: mouseDown = true; button = MouseButtons.Right; clickCount = 1; break; case (int)WindowsMessage.WM_RBUTTONUP: mouseUp = true; button = MouseButtons.Right; clickCount = 1; break; case (int)WindowsMessage.WM_RBUTTONDBLCLK: button = MouseButtons.Right; clickCount = 2; break; case (int)WindowsMessage.WM_MOUSEWHEEL: mouseDelta = (short)((mouseHookStruct.MouseData >> 16) & 0xffff); break; } MouseEventExtArgs e = new MouseEventExtArgs( button, clickCount, mouseHookStruct.Point.X, mouseHookStruct.Point.Y, mouseDelta); if (this.EventMouseUp != null && mouseUp) { this.EventMouseUp.Invoke(null, e); } if (this.EventMouseDown != null && mouseDown) { this.EventMouseDown.Invoke(null, e); } if (this.EventMouseClick != null && clickCount > 0) { this.EventMouseClick.Invoke(null, e); } if (this.EventMouseClickExt != null && clickCount > 0) { this.EventMouseClickExt.Invoke(null, e); } if (this.EventMouseDoubleClick != null && clickCount == 2) { this.EventMouseDoubleClick.Invoke(null, e); } if (this.EventMouseWheel != null && mouseDelta != 0) { this.EventMouseWheel.Invoke(null, e); } if ((this.EventMouseMove != null || this.EventMouseMoveExt != null) && (this.Old_X != mouseHookStruct.Point.X || this.Old_Y != mouseHookStruct.Point.Y)) { this.Old_X = mouseHookStruct.Point.X; this.Old_Y = mouseHookStruct.Point.Y; if (EventMouseMove != null) { this.EventMouseMove.Invoke(null, e); } if (EventMouseMoveExt != null) { this.EventMouseMoveExt.Invoke(null, e); } } if (e.Handled) { return(-1); } } return(NativeMethods.CallNextHookEx(this.MouseHookHandle, nCode, wParam, lParam)); }
/// <summary> /// /// </summary> /// <param name="nCode"></param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <returns></returns> private int MouseHookProc(int nCode, int wParam, IntPtr lParam) { if (nCode >= 0) { MouseHookStruct mouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); MouseButtons button = MouseButtons.None; short mouseDelta = 0; int clickCount = 0; bool mouseDown = false; bool mouseUp = false; switch (wParam) { case (int)WindowsMessage.WM_LBUTTONDOWN: mouseDown = true; button = MouseButtons.Left; clickCount = 1; break; case (int)WindowsMessage.WM_LBUTTONUP: mouseUp = true; button = MouseButtons.Left; clickCount = 1; break; case (int)WindowsMessage.WM_LBUTTONDBLCLK: button = MouseButtons.Left; clickCount = 2; break; case (int)WindowsMessage.WM_RBUTTONDOWN: mouseDown = true; button = MouseButtons.Right; clickCount = 1; break; case (int)WindowsMessage.WM_RBUTTONUP: mouseUp = true; button = MouseButtons.Right; clickCount = 1; break; case (int)WindowsMessage.WM_RBUTTONDBLCLK: button = MouseButtons.Right; clickCount = 2; break; case (int)WindowsMessage.WM_MOUSEWHEEL: mouseDelta = (short)((mouseHookStruct.MouseData >> 16) & 0xffff); break; } MouseEventExtArgs e = new MouseEventExtArgs( button, clickCount, mouseHookStruct.Point.X, mouseHookStruct.Point.Y, mouseDelta); if (this.EventMouseUp != null && mouseUp) this.EventMouseUp.Invoke(null, e); if (this.EventMouseDown != null && mouseDown) this.EventMouseDown.Invoke(null, e); if (this.EventMouseClick != null && clickCount > 0) this.EventMouseClick.Invoke(null, e); if (this.EventMouseClickExt != null && clickCount > 0) this.EventMouseClickExt.Invoke(null, e); if (this.EventMouseDoubleClick != null && clickCount == 2) this.EventMouseDoubleClick.Invoke(null, e); if (this.EventMouseWheel != null && mouseDelta != 0) this.EventMouseWheel.Invoke(null, e); if ((this.EventMouseMove != null || this.EventMouseMoveExt != null) && (this.Old_X != mouseHookStruct.Point.X || this.Old_Y != mouseHookStruct.Point.Y)) { this.Old_X = mouseHookStruct.Point.X; this.Old_Y = mouseHookStruct.Point.Y; if (EventMouseMove != null) this.EventMouseMove.Invoke(null, e); if (EventMouseMoveExt != null) this.EventMouseMoveExt.Invoke(null, e); } if (e.Handled) return -1; } return NativeMethods.CallNextHookEx(this.MouseHookHandle, nCode, wParam, lParam); }