コード例 #1
0
        //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));
        }
コード例 #2
0
        // 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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: MouseHooker.cs プロジェクト: LuoTR/EasyHooker
        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);
        }
コード例 #7
0
 // основной метод класса - в нем происходит перхват и вызов событий
 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));
     }
 }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
 static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref MouseStruct lParam);
コード例 #10
0
        /// <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;
        }
コード例 #11
0
        /// <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));
        }
コード例 #12
0
        // 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));
        }
コード例 #13
0
        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));
        }
コード例 #14
0
        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));
            }
        }
コード例 #15
0
        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;
            }
        }
コード例 #16
0
        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;
        }
コード例 #17
0
        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;
        }
コード例 #18
0
        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);
            }
        }
コード例 #19
0
ファイル: MouseHooker.cs プロジェクト: LuoTR/EasyHooker
 private static extern int CallNextHookEx(int idHook, int nCode, int wParam, MouseStruct lParam);