public static IntPtr MouseHookProc()

in Tools/UIRecorder/UIRecorder/MouseKeyboardHook.cs [421:469]


        public static IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0 || MouseKeyboardEventHandler.s_threadRecorder == null || s_bPauseMouseKeyboard == true)
            {
                return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
            }

            MSLLHOOKSTRUCT mhs = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
            int left = mhs.pt.X;
            int top = mhs.pt.Y;

            //skip if cursor is on this app
            IntPtr hwnd = NativeMethods.WindowFromPoint(left, top);
            if (hwnd == MainWindow.s_windowHandle)
            {
                MouseKeyboardEventHandler.ResetRecordTimer();
                return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
            }

            switch (wParam.ToInt32())
            {
                case WM_MOUSEMOVE:
                    MouseKeyboardEventHandler.MouseMove(left, top);
                    break;

                case WM_MOUSEWHEEL:
                    short zDelta = (short)(mhs.mouseData >> 16);
                    MouseKeyboardEventHandler.MouseWheel(left, top, zDelta);
                    break;

                case WM_LBUTTONDOWN:
                    MouseKeyboardEventHandler.LeftMouseDown(left, top);
                    break;

                case WM_LBUTTONUP:
                    MouseKeyboardEventHandler.LeftMouseUp(left, top);
                    break;

                case WM_RBUTTONDOWN:
                    MouseKeyboardEventHandler.RightMouseDown(left, top);
                    break;

                case WM_RBUTTONUP:
                    MouseKeyboardEventHandler.RightMouseUp(left, top);
                    break;
            }

            return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
        }