//raise function every mouse hook private static int RCH_Mouse_Hook_Proc(int nCode, int wParam, IntPtr lParam) { MouseStruct m_struct = (MouseStruct)Marshal.PtrToStructure(lParam, typeof(MouseStruct)); _Mouse.Invoke(m_struct, wParam); return(CallNextHookEx(RCH_Mouse_Handler, nCode, wParam, lParam)); }
// Token: 0x0600030B RID: 779 RVA: 0x0000F1D8 File Offset: 0x0000D3D8 internal static MouseEventExtArgs FromRawDataGlobal(CallbackData data) { IntPtr wparam = data.WParam; IntPtr lparam = data.LParam; MouseStruct mouseInfo = (MouseStruct)Marshal.PtrToStructure(lparam, typeof(MouseStruct)); return(MouseEventExtArgs.FromRawDataUniversal(wparam, mouseInfo)); }
internal static MouseEventExtArgs FromRawDataGlobal(CallbackData data) { var wParam = data.WParam; var lParam = data.LParam; MouseStruct marshalledMouseStruct = (MouseStruct)Marshal.PtrToStructure(lParam, typeof(MouseStruct)); return(FromRawDataUniversal(wParam, marshalledMouseStruct)); }
MouseStruct mfromBytes(byte[] arr) { MouseStruct mystruct = new MouseStruct(); int size = Marshal.SizeOf(mystruct); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, size); mystruct = (MouseStruct)Marshal.PtrToStructure(ptr, mystruct.GetType()); Marshal.FreeHGlobal(ptr); return(mystruct); }
byte[] getBytes(MouseStruct mystruct) { int size = Marshal.SizeOf(mystruct); byte[] arr = new byte[size]; IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(mystruct, ptr, true); Marshal.Copy(ptr, arr, 0, size); Marshal.FreeHGlobal(ptr); return(arr); }
private int CallOutside(int nCode, int wParam, MouseStruct lParam) { if (!(nCode >= 0)) { return(CallNextHookEx(hookId, nCode, wParam, lParam)); } bool shouldBlock = mc.Invoke(lParam.pt, wParam); if (!shouldBlock) { return(CallNextHookEx(hookId, nCode, wParam, lParam)); } return(1); }
// основной метод класса - в нем происходит перхват и вызов событий private int findMoving(int code, int wParam, ref MouseStruct lParam) { try { if (code >= 0) { if ((wParam == WM_MOUSEMOVE) && (MouseMovedEvent != null)) { MouseMovedEvent(this, new EventArgs()); } return(CallNextHookEx(fhook, code, wParam, ref lParam)); } return(CallNextHookEx(fhook, code, wParam, ref lParam)); } catch (Exception ex) { logger.Error("ERROR:MOUSE HOOK:{0}", ex.Message); return(CallNextHookEx(fhook, code, wParam, ref lParam)); } }
/// <summary> /// Creates <see cref="MouseEventExtArgs" /> from relevant mouse data. /// </summary> /// <param name="wParam">First Windows Message parameter.</param> /// <param name="mouseInfo">A MouseStruct containing information from which to construct MouseEventExtArgs.</param> /// <returns>A new MouseEventExtArgs object.</returns> private static MouseEventExtArgs FromRawDataUniversal(IntPtr wParam, MouseStruct mouseInfo) { var button = MouseButtons.None; short mouseDelta = 0; var clickCount = 0; var isMouseButtonDown = false; var isMouseButtonUp = false; switch ((long)wParam) { case Messages.WM_LBUTTONDOWN: isMouseButtonDown = true; button = MouseButtons.Left; clickCount = 1; break; case Messages.WM_LBUTTONUP: isMouseButtonUp = true; button = MouseButtons.Left; clickCount = 1; break; case Messages.WM_LBUTTONDBLCLK: isMouseButtonDown = true; button = MouseButtons.Left; clickCount = 2; break; case Messages.WM_RBUTTONDOWN: isMouseButtonDown = true; button = MouseButtons.Right; clickCount = 1; break; case Messages.WM_RBUTTONUP: isMouseButtonUp = true; button = MouseButtons.Right; clickCount = 1; break; case Messages.WM_RBUTTONDBLCLK: isMouseButtonDown = true; button = MouseButtons.Right; clickCount = 2; break; case Messages.WM_MBUTTONDOWN: isMouseButtonDown = true; button = MouseButtons.Middle; clickCount = 1; break; case Messages.WM_MBUTTONUP: isMouseButtonUp = true; button = MouseButtons.Middle; clickCount = 1; break; case Messages.WM_MBUTTONDBLCLK: isMouseButtonDown = true; button = MouseButtons.Middle; clickCount = 2; break; case Messages.WM_MOUSEWHEEL: mouseDelta = mouseInfo.MouseData; break; case Messages.WM_XBUTTONDOWN: button = mouseInfo.MouseData == 1 ? MouseButtons.XButton1 : MouseButtons.XButton2; isMouseButtonDown = true; clickCount = 1; break; case Messages.WM_XBUTTONUP: button = mouseInfo.MouseData == 1 ? MouseButtons.XButton1 : MouseButtons.XButton2; isMouseButtonUp = true; clickCount = 1; break; case Messages.WM_XBUTTONDBLCLK: isMouseButtonDown = true; button = mouseInfo.MouseData == 1 ? MouseButtons.XButton1 : MouseButtons.XButton2; clickCount = 2; break; case Messages.WM_MOUSEHWHEEL: mouseDelta = mouseInfo.MouseData; break; } var e = new MouseEventExtArgs( button, clickCount, mouseInfo.Point, mouseDelta, mouseInfo.Timestamp, isMouseButtonDown, isMouseButtonUp); return(e); }
static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref MouseStruct lParam);
/// <summary> /// Creates <see cref="MouseEventExtArgs"/> from relevant mouse data. /// </summary> /// <param name="wParam">First Windows Message parameter.</param> /// <param name="mouseInfo">A MouseStruct containing information from which to contruct MouseEventExtArgs.</param> /// <returns>A new MouseEventExtArgs object.</returns> private static MouseEventExtArgs FromRawDataUniversal(int wParam, MouseStruct mouseInfo) { MouseButtons button = MouseButtons.None; short mouseDelta = 0; int clickCount = 0; bool isMouseKeyDown = false; bool isMouseKeyUp = false; switch (wParam) { case Messages.WM_LBUTTONDOWN: isMouseKeyDown = true; button = MouseButtons.Left; clickCount = 1; break; case Messages.WM_LBUTTONUP: isMouseKeyUp = true; button = MouseButtons.Left; clickCount = 1; break; case Messages.WM_LBUTTONDBLCLK: isMouseKeyDown = true; button = MouseButtons.Left; clickCount = 2; break; case Messages.WM_RBUTTONDOWN: isMouseKeyDown = true; button = MouseButtons.Right; clickCount = 1; break; case Messages.WM_RBUTTONUP: isMouseKeyUp = true; button = MouseButtons.Right; clickCount = 1; break; case Messages.WM_RBUTTONDBLCLK: isMouseKeyDown = true; button = MouseButtons.Right; clickCount = 2; break; case Messages.WM_MBUTTONDOWN: isMouseKeyDown = true; button = MouseButtons.Middle; clickCount = 1; break; case Messages.WM_MBUTTONUP: isMouseKeyUp = true; button = MouseButtons.Middle; clickCount = 1; break; case Messages.WM_MBUTTONDBLCLK: isMouseKeyDown = true; button = MouseButtons.Middle; clickCount = 2; break; case Messages.WM_MOUSEWHEEL: mouseDelta = mouseInfo.MouseData; break; case Messages.WM_XBUTTONDOWN: button = mouseInfo.MouseData == 1 ? MouseButtons.XButton1 : MouseButtons.XButton2; isMouseKeyDown = true; clickCount = 1; break; case Messages.WM_XBUTTONUP: button = mouseInfo.MouseData == 1 ? MouseButtons.XButton1 : MouseButtons.XButton2; isMouseKeyUp = true; clickCount = 1; break; case Messages.WM_XBUTTONDBLCLK: isMouseKeyDown = true; button = mouseInfo.MouseData == 1 ? MouseButtons.XButton1 : MouseButtons.XButton2; clickCount = 2; break; } var e = new MouseEventExtArgs( button, clickCount, mouseInfo.Point, mouseDelta, mouseInfo.Timestamp, isMouseKeyDown, isMouseKeyUp); return e; }
/// <summary> /// Creates <see cref="MouseEventExtArgs"/> from Windows Message parameters, /// based upon a system-wide global hook. /// </summary> /// <param name="wParam">The first Windows Message parameter.</param> /// <param name="lParam">The second Windows Message parameter.</param> /// <returns>A new MouseEventExtArgs object.</returns> internal static MouseEventExtArgs FromRawDataGlobal(int wParam, IntPtr lParam) { MouseStruct marshalledMouseStruct = (MouseStruct)Marshal.PtrToStructure(lParam, typeof(MouseStruct)); return(FromRawDataUniversal(wParam, marshalledMouseStruct)); }
// Token: 0x0600030C RID: 780 RVA: 0x0000F214 File Offset: 0x0000D414 private static MouseEventExtArgs FromRawDataUniversal(IntPtr wParam, MouseStruct mouseInfo) { MouseButtons buttons = MouseButtons.None; short delta = 0; int clicks = 0; bool isMouseKeyDown = false; bool isMouseKeyUp = false; long num = (long)wParam; if (num <= 526L && num >= 513L) { switch ((int)(num - 513L)) { case 0: isMouseKeyDown = true; buttons = MouseButtons.Left; clicks = 1; break; case 1: isMouseKeyUp = true; buttons = MouseButtons.Left; clicks = 1; break; case 2: isMouseKeyDown = true; buttons = MouseButtons.Left; clicks = 2; break; case 3: isMouseKeyDown = true; buttons = MouseButtons.Right; clicks = 1; break; case 4: isMouseKeyUp = true; buttons = MouseButtons.Right; clicks = 1; break; case 5: isMouseKeyDown = true; buttons = MouseButtons.Right; clicks = 2; break; case 6: isMouseKeyDown = true; buttons = MouseButtons.Middle; clicks = 1; break; case 7: isMouseKeyUp = true; buttons = MouseButtons.Middle; clicks = 1; break; case 8: isMouseKeyDown = true; buttons = MouseButtons.Middle; clicks = 2; break; case 9: delta = mouseInfo.MouseData; break; case 10: buttons = ((mouseInfo.MouseData == 1) ? MouseButtons.XButton1 : MouseButtons.XButton2); isMouseKeyDown = true; clicks = 1; break; case 11: buttons = ((mouseInfo.MouseData == 1) ? MouseButtons.XButton1 : MouseButtons.XButton2); isMouseKeyUp = true; clicks = 1; break; case 12: isMouseKeyDown = true; buttons = ((mouseInfo.MouseData == 1) ? MouseButtons.XButton1 : MouseButtons.XButton2); clicks = 2; break; case 13: delta = mouseInfo.MouseData; break; } } return(new MouseEventExtArgs(buttons, clicks, mouseInfo.Point, (int)delta, mouseInfo.Timestamp, isMouseKeyDown, isMouseKeyUp)); }
private static int LowLevelMouseHookCallback(int code, IntPtr wParam, IntPtr lParam) { if (code < 0) { return(CallNextHookEx(IntPtr.Zero, code, wParam, lParam)); } MouseFlags flag = (MouseFlags)wParam; switch (flag) { case MouseFlags.WM_LBUTTONDOWN: Debug.WriteLine(MouseFlags.WM_LBUTTONDOWN); break; case MouseFlags.WM_LBUTTONUP: Debug.WriteLine(MouseFlags.WM_LBUTTONUP); break; case MouseFlags.WM_MOUSEMOVE: Debug.WriteLine(MouseFlags.WM_MOUSEMOVE); break; case MouseFlags.WM_MOUSEWHEEL: Debug.WriteLine(MouseFlags.WM_MOUSEWHEEL); break; case MouseFlags.WM_MOUSEHWHEEL: Debug.WriteLine(MouseFlags.WM_MOUSEHWHEEL); break; case MouseFlags.WM_RBUTTONDOWN: Debug.WriteLine(MouseFlags.WM_RBUTTONDOWN); break; case MouseFlags.WM_RBUTTONUP: Debug.WriteLine(MouseFlags.WM_RBUTTONUP); break; case MouseFlags.WM_XBUTTONDOWN: Debug.WriteLine(MouseFlags.WM_XBUTTONDOWN); break; case MouseFlags.WM_XBUTTONUP: Debug.WriteLine(MouseFlags.WM_XBUTTONUP); break; case MouseFlags.WM_XBUTTONDBLCLK: Debug.WriteLine(MouseFlags.WM_XBUTTONDBLCLK); break; case MouseFlags.WM_NCXBUTTONDOWN: Debug.WriteLine(MouseFlags.WM_NCXBUTTONDOWN); break; case MouseFlags.WM_NCXBUTTONUP: Debug.WriteLine(MouseFlags.WM_NCXBUTTONUP); break; case MouseFlags.WM_NCXBUTTONDBLCLK: Debug.WriteLine(MouseFlags.WM_NCXBUTTONDBLCLK); break; case MouseFlags.WM_MBUTTONDOWN: Debug.WriteLine(MouseFlags.WM_NCXBUTTONDBLCLK); break; case MouseFlags.WM_MBUTTONUP: Debug.WriteLine(MouseFlags.WM_MBUTTONUP); break; default: Debug.WriteLine("Unknown Flag: {0:X}", flag); break; } MouseStruct mouseStruct = Marshal.PtrToStructure <MouseStruct>(lParam); Debug.WriteLine(mouseStruct.point.x + ", " + mouseStruct.point.y); Debug.WriteLine(mouseStruct.mouseData); Debug.WriteLine(mouseStruct.flags); //Debug.WriteLine(mouseStruct.time); if (mouseStruct.dwExtraInfo.ToUInt32() != 0) { Debug.WriteLine(mouseStruct.dwExtraInfo); } Debug.WriteLine(""); return(CallNextHookEx(IntPtr.Zero, code, wParam, lParam)); }
public int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) { //Marshall the data from the callback. MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); int msg = wParam.ToInt32(); double width = System.Windows.SystemParameters.PrimaryScreenWidth; double height = System.Windows.SystemParameters.PrimaryScreenHeight; MouseStruct mystruct = new MouseStruct(); mystruct.me = msg; mystruct.mhs = MyMouseHookStruct; int y = (int)((mystruct.mhs.pt.y / height) * 65535); short mouseD = (short)(mystruct.mhs.mouseData >> 16); mystruct.mhs.mouseData = mouseD; if (nCode < 0) { return(CallNextHookEx(hHook, nCode, wParam, lParam)); } else { if ((mystruct.mhs.pt.x >= width || mystruct.mhs.pt.x <= 0) && !isCapturing && ((RightServer != null && RightServer.Status == 1) || (LeftServer != null && LeftServer.Status == 1))) { if (mystruct.mhs.pt.x >= width && RightServer != null && RightServer.Status == 1 && !isCapturing) { Console.WriteLine("RightServer"); isCapturing = true; currentServer = RightServer; mouse_event(0x0001 | 0x8000, (uint)((8 / width) * 65535), (uint)y, 0, UIntPtr.Zero); currentServer.SendLocalClipboard(); Win.Capturing(); return(1); } else if (mystruct.mhs.pt.x <= 0 && LeftServer != null && LeftServer.Status == 1 && !isCapturing) { Console.WriteLine("LeftServer"); isCapturing = true; currentServer = LeftServer; mouse_event(1 | 0x8000, 65520, (uint)y, 0, UIntPtr.Zero); currentServer.SendLocalClipboard(); Win.Capturing(); return(1); } } if (mystruct.mhs.pt.x <= 0 && isCapturing && currentServer == RightServer) { isCapturing = false; currentServer.GetRemoteClipboard(); mouse_event(1 | 0x8000, (uint)(((width - 4) / width) * 65535), (uint)y, 0, UIntPtr.Zero); Win.stopCapturing(); return(1); } else if (mystruct.mhs.pt.x >= width && isCapturing && currentServer == LeftServer) { isCapturing = false; currentServer.GetRemoteClipboard(); mouse_event(1 | 0x8000, (uint)((10 / width) * 65535), (uint)y, 0, UIntPtr.Zero); Win.stopCapturing(); return(1); } if (isCapturing && currentServer != null && currentServer.Status == 1) { try { mystruct.mhs.pt.x = (int)((mystruct.mhs.pt.x / width) * 65535); mystruct.mhs.pt.y = (int)((mystruct.mhs.pt.y / height) * 65535); Mouse.OverrideCursor = System.Windows.Input.Cursors.None; UdpClient uc = currentServer.getUdpClient(); String strCaption = "x = " + MyMouseHookStruct.pt.x.ToString("d") + " y = " + MyMouseHookStruct.pt.y.ToString("d"); Int32 im = 0; byte[] mouse = BitConverter.GetBytes(im); byte[] bytestream = getBytes(mystruct); Console.WriteLine("Transmitting....."); byte[] sending = new byte[bytestream.Length + sizeof(Int32)]; mouse.CopyTo(sending, 0); bytestream.CopyTo(sending, sizeof(Int32)); uc.Send(sending, sending.Length); //You must get the active form because it is a static function. Console.WriteLine(strCaption + " event" + msg); if (wParam != (IntPtr)WM_MOUSEMOVE) { return(1); } } catch (Exception e) { Console.WriteLine(e.Message); isCapturing = false; Win.connectionProblem(currentServer); } } return(CallNextHookEx(hHook, nCode, wParam, lParam)); } }
public void event_Switch_Mouse(byte[] b1) { MouseStruct mystruct = mfromBytes(b1); POINT p = mystruct.mhs.pt; int rotation = mystruct.mhs.mouseData; switch ((uint)mystruct.me) { case WM_LBUTTONDBLCLK: Console.WriteLine("Case 1"); sendMouseDoubleClick(p); break; case WM_LBUTTONDOWN: Console.WriteLine("Case 2"); sendMouseDown(p); break; case WM_LBUTTONUP: Console.WriteLine("Case3"); sendMouseUp(p); break; case WM_MBUTTONDBLCLK: Console.WriteLine("Case 4"); sendMouseMDoubleClick(p); break; case WM_MBUTTONDOWN: Console.WriteLine("Case 5"); sendMouseMDown(p); break; case WM_MBUTTONUP: Console.WriteLine("Case 6"); sendMouseMUp(p); break; case WM_MOUSEMOVE: Console.WriteLine("Case 7"); moveMouse(p); break; case WM_MOUSEWHEEL: Console.WriteLine("Case 8 wheel"); mouveWHEELMouse(p, (uint)rotation); break; case WM_RBUTTONDOWN: Console.WriteLine("Case 9"); sendMouseRightDown(p); break; case WM_RBUTTONDBLCLK: Console.WriteLine("Case 10"); sendMouseRightDoubleClick(p); break; case WM_RBUTTONUP: Console.WriteLine("Case 11"); sendMouseRightUp(p); break; case WM_XBUTTONDBLCLK: Console.WriteLine("Case 12"); sendMouseXDoubleClick(p); break; case WM_XBUTTONDOWN: Console.WriteLine("Case 13"); sendMouseXDown(p); break; case WM_XBUTTONUP: Console.WriteLine("Case 14"); sendMouseXUp(p); break; case WM_MOUSEHWHEEL: Console.WriteLine("Case 14 wheel"); mouveHWHEELMouse(p, (uint)rotation); break; default: Console.WriteLine("Default case mouse" + (uint)mystruct.me); break; } }
MouseStruct mfromBytes(byte[] arr) { MouseStruct mystruct = new MouseStruct(); int size = Marshal.SizeOf(mystruct); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, size); mystruct = (MouseStruct)Marshal.PtrToStructure(ptr, mystruct.GetType()); Marshal.FreeHGlobal(ptr); return mystruct; }
byte[] getBytes(MouseStruct mystruct) { int size = Marshal.SizeOf(mystruct); byte[] arr = new byte[size]; IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(mystruct, ptr, true); Marshal.Copy(ptr, arr, 0, size); Marshal.FreeHGlobal(ptr); return arr; }
public int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) { //Marshall the data from the callback. MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); int msg = wParam.ToInt32(); double width = System.Windows.SystemParameters.PrimaryScreenWidth; double height = System.Windows.SystemParameters.PrimaryScreenHeight; MouseStruct mystruct = new MouseStruct(); mystruct.me = msg; mystruct.mhs = MyMouseHookStruct; int y = (int)((mystruct.mhs.pt.y / height) * 65535); short mouseD = (short)(mystruct.mhs.mouseData >> 16); mystruct.mhs.mouseData = mouseD; if (nCode < 0) { return CallNextHookEx(hHook, nCode, wParam, lParam); } else { if ((mystruct.mhs.pt.x >= width || mystruct.mhs.pt.x <= 0) && !isCapturing && ((RightServer != null && RightServer.Status == 1) || (LeftServer != null && LeftServer.Status == 1))) { if (mystruct.mhs.pt.x >= width && RightServer != null && RightServer.Status == 1 && !isCapturing) { Console.WriteLine("RightServer"); isCapturing = true; currentServer = RightServer; mouse_event(0x0001 | 0x8000, (uint)((8 / width) * 65535), (uint)y, 0, UIntPtr.Zero); currentServer.SendLocalClipboard(); Win.Capturing(); return 1; } else if (mystruct.mhs.pt.x <= 0 && LeftServer != null && LeftServer.Status == 1 && !isCapturing) { Console.WriteLine("LeftServer"); isCapturing = true; currentServer = LeftServer; mouse_event(1 | 0x8000, 65520, (uint)y, 0, UIntPtr.Zero); currentServer.SendLocalClipboard(); Win.Capturing(); return 1; } } if (mystruct.mhs.pt.x <= 0 && isCapturing && currentServer == RightServer) { isCapturing = false; currentServer.GetRemoteClipboard(); mouse_event(1 | 0x8000, (uint)(((width - 4) / width) * 65535), (uint)y, 0, UIntPtr.Zero); Win.stopCapturing(); return 1; } else if (mystruct.mhs.pt.x >= width && isCapturing && currentServer == LeftServer) { isCapturing = false; currentServer.GetRemoteClipboard(); mouse_event(1 | 0x8000, (uint)((10 / width) * 65535), (uint)y, 0, UIntPtr.Zero); Win.stopCapturing(); return 1; } if (isCapturing && currentServer != null && currentServer.Status == 1) { try { mystruct.mhs.pt.x = (int)((mystruct.mhs.pt.x / width) * 65535); mystruct.mhs.pt.y = (int)((mystruct.mhs.pt.y / height) * 65535); Mouse.OverrideCursor = System.Windows.Input.Cursors.None; UdpClient uc = currentServer.getUdpClient(); String strCaption = "x = " + MyMouseHookStruct.pt.x.ToString("d") + " y = " + MyMouseHookStruct.pt.y.ToString("d"); Int32 im = 0; byte[] mouse = BitConverter.GetBytes(im); byte[] bytestream = getBytes(mystruct); Console.WriteLine("Transmitting....."); byte[] sending = new byte[bytestream.Length + sizeof(Int32)]; mouse.CopyTo(sending, 0); bytestream.CopyTo(sending, sizeof(Int32)); uc.Send(sending, sending.Length); //You must get the active form because it is a static function. Console.WriteLine(strCaption + " event" + msg); if (wParam != (IntPtr)WM_MOUSEMOVE) return 1; } catch (Exception e) { Console.WriteLine(e.Message); isCapturing = false; Win.connectionProblem(currentServer); } } return CallNextHookEx(hHook, nCode, wParam, lParam); } }
private static extern int CallNextHookEx(int idHook, int nCode, int wParam, MouseStruct lParam);