private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { if (wParam == (IntPtr)WM_MOUSEMOVE || wParam == (IntPtr)WM_NCMOUSEMOVE) { int x = Marshal.ReadInt32(lParam); int y = Marshal.ReadInt32(lParam, 4); if (_onMouseMoved != null) { _onMouseMoved.Raise(this, new MouseMovedArgs(new Vector2(x, y))); } } else { MOUSEACTION action = wParam == (IntPtr)WM_LBUTTONCLICK || wParam == (IntPtr)WM_MBUTTONCLICK || wParam == (IntPtr)WM_RBUTTONCLICK ? MOUSEACTION.CLICK : (wParam == (IntPtr)WM_LBUTTONDOWN || wParam == (IntPtr)WM_MBUTTONDOWN || wParam == (IntPtr)WM_RBUTTONDOWN ? MOUSEACTION.DOWN : (wParam == (IntPtr)WM_LBUTTONUP || wParam == (IntPtr)WM_MBUTTONUP || wParam == (IntPtr)WM_RBUTTONUP ? MOUSEACTION.UP : MOUSEACTION.NONE)); MOUSEBUTTON button = wParam == (IntPtr)WM_LBUTTONCLICK || wParam == (IntPtr)WM_LBUTTONDOWN || wParam == (IntPtr)WM_LBUTTONUP ? MOUSEBUTTON.LEFT : (wParam == (IntPtr)WM_MBUTTONCLICK || wParam == (IntPtr)WM_MBUTTONDOWN || wParam == (IntPtr)WM_MBUTTONUP ? MOUSEBUTTON.MIDDLE : (wParam == (IntPtr)WM_RBUTTONCLICK || wParam == (IntPtr)WM_RBUTTONDOWN || wParam == (IntPtr)WM_RBUTTONUP ? MOUSEBUTTON.RIGHT : MOUSEBUTTON.NONE)); if (action != MOUSEACTION.NONE && button != MOUSEBUTTON.NONE) { if (_onMouseClicked != null) { _onMouseClicked.Raise(this, new MouseClickedArgs(button, action)); } } } } return(CallNextHookEx(_hookID, nCode, wParam, lParam)); }
public MouseClickedArgs(MOUSEBUTTON b, MOUSEACTION a) { click = new MouseClick(b, a); }
public MouseClick(MOUSEBUTTON b, MOUSEACTION a) { button = b; action = a; }