/// <summary> /// Processes Mouse Procedures /// </summary> /// <param name="code"></param> /// <param name="wParam"></param> /// <param name="lParam"></param> /// <returns></returns> private IntPtr MouseProc(int code, IntPtr wParam, IntPtr lParam) { WinApi.MouseLLHookStruct hookStruct = (WinApi.MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(WinApi.MouseLLHookStruct)); int msg = wParam.ToInt32(); int x = hookStruct.pt.x; int y = hookStruct.pt.y; int delta = (short)((hookStruct.mouseData >> 16) & 0xffff); if (msg == WinApi.WM_MOUSEWHEEL) { OnMouseWheel(new MouseEventArgs(MouseButtons.None, 0, x, y, delta)); } else if (msg == WinApi.WM_MOUSEMOVE) { OnMouseMove(new MouseEventArgs(MouseButtons.None, 0, x, y, delta)); } else if (msg == WinApi.WM_LBUTTONDBLCLK) { OnMouseDoubleClick(new MouseEventArgs(MouseButtons.Left, 0, x, y, delta)); } else if (msg == WinApi.WM_LBUTTONDOWN) { OnMouseDown(new MouseEventArgs(MouseButtons.Left, 0, x, y, delta)); } else if (msg == WinApi.WM_LBUTTONUP) { OnMouseUp(new MouseEventArgs(MouseButtons.Left, 0, x, y, delta)); OnMouseClick(new MouseEventArgs(MouseButtons.Left, 0, x, y, delta)); } else if (msg == WinApi.WM_MBUTTONDBLCLK) { OnMouseDoubleClick(new MouseEventArgs(MouseButtons.Middle, 0, x, y, delta)); } else if (msg == WinApi.WM_MBUTTONDOWN) { OnMouseDown(new MouseEventArgs(MouseButtons.Middle, 0, x, y, delta)); } else if (msg == WinApi.WM_MBUTTONUP) { OnMouseUp(new MouseEventArgs(MouseButtons.Middle, 0, x, y, delta)); } else if (msg == WinApi.WM_RBUTTONDBLCLK) { OnMouseDoubleClick(new MouseEventArgs(MouseButtons.Right, 0, x, y, delta)); } else if (msg == WinApi.WM_RBUTTONDOWN) { OnMouseDown(new MouseEventArgs(MouseButtons.Right, 0, x, y, delta)); } else if (msg == WinApi.WM_RBUTTONUP) { OnMouseUp(new MouseEventArgs(MouseButtons.Right, 0, x, y, delta)); } else if (msg == WinApi.WM_XBUTTONDBLCLK) { OnMouseDoubleClick(new MouseEventArgs(MouseButtons.XButton1, 0, x, y, delta)); } else if (msg == WinApi.WM_XBUTTONDOWN) { OnMouseDown(new MouseEventArgs(MouseButtons.XButton1, 0, x, y, delta)); } else if (msg == WinApi.WM_XBUTTONUP) { OnMouseUp(new MouseEventArgs(MouseButtons.XButton1, 0, x, y, delta)); } return(WinApi.CallNextHookEx(_handle, code, wParam, lParam)); }