private void AllowUserToMoveWindowByDragging() { //Lots of low level windows BS MouseHook.HookWindow((WM code) => { if (code == WM.MOUSEMOVE || code == WM.NCMOUSEMOVE) { if (_bMouseDown) { System.Drawing.Point curMouse = MouseHook.GetMousePosition(); if (_vLastMouse != null) { System.Drawing.Point delta = new System.Drawing.Point( _vLastMouse.Value.X - curMouse.X, _vLastMouse.Value.Y - curMouse.Y); Top -= delta.Y; Left -= delta.X; } _vLastMouse = new System.Drawing.Point(curMouse.X, curMouse.Y); } } }); }
public static void HookWindow(Action <WM> callback) { _callback = callback; _hookProc = (int code, IntPtr wParam, IntPtr lParam) => { if (code < 0) { //you need to call CallNextHookEx without further processing //and return the value returned by CallNextHookEx return(MouseHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam)); } WM message = (WM)wParam.ToInt32(); _callback(message); return(MouseHook.CallNextHookEx(IntPtr.Zero, code, wParam, lParam));; }; //Hooks the mouse into the application window. SetWindowsHookEx( HookType.WH_MOUSE, _hookProc, IntPtr.Zero, GetCurrentThreadId()); }
private void _MoveWindow_MouseDown(object sender, MouseButtonEventArgs e) { System.Drawing.Point curMouse = MouseHook.GetMousePosition(); _vLastMouse = new System.Drawing.Point(curMouse.X, curMouse.Y); _bMouseDown = true; }