Example #1
0
        /// <summary>
        /// フック手続き
        /// </summary>
        /// <param name="hookCode"></param>
        /// <param name="msg"></param>
        /// <param name="hookStruct"></param>
        /// <returns></returns>
        private static IntPtr HookProcedure(int hookCode, uint msg, ref MSLHooKStruct hookStruct)
        {
            try
            {
                if (0 <= hookCode && GlobalHook_Mouse.hookEvent != null && !GlobalHook_Mouse.IsPaused)
                {
                    var stroke = GlobalHook_Mouse.ConverManageStroke(msg, ref hookStruct);
                    state.button    = stroke.Item1;
                    state.action    = stroke.Item2;
                    state.x         = hookStruct.point.x;
                    state.y         = hookStruct.point.y;
                    state.data      = hookStruct.mouseData;
                    state.flags     = hookStruct.flags;
                    state.time      = hookStruct.time;
                    state.extraInfo = hookStruct.extraInfo;

                    GlobalHook_Mouse.hookEvent(ref state);

                    if (GlobalHook_Mouse.isCancel)
                    {
                        GlobalHook_Mouse.isCancel = false;
                        return(new IntPtr(1));
                    }
                }

                return(CallNextHookEx(GlobalHook_Mouse.hookProcedureHandle, hookCode, msg, ref hookStruct));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                throw;
            }
        }
Example #2
0
 private static extern IntPtr CallNextHookEx(IntPtr hookHandle, int hookCode, uint msg, ref MSLHooKStruct mslHookStruct);
Example #3
0
        /// <summary>
        /// マウスの操作状況の取得
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="hookStruct"></param>
        /// <returns></returns>
        private static Tuple <MouseButton, MouseAction> ConverManageStroke(uint msg, ref MSLHooKStruct hookStruct)
        {
            MouseButton button;
            MouseAction action;

            switch (msg)
            {
            case WM_MOUSEMOVE:
                button = MouseButton.None;
                action = MouseAction.Move;
                break;

            case WM_LBUTTONDOWN:
                button = MouseButton.Left;
                action = MouseAction.Down;
                break;

            case WM_LBUTTONUP:
                button = MouseButton.Left;
                action = MouseAction.Up;
                break;

            case WM_RBUTTONDOWN:
                button = MouseButton.Right;
                action = MouseAction.Down;
                break;

            case WM_RBUTTONUP:
                button = MouseButton.Right;
                action = MouseAction.Up;
                break;

            case WM_MBUTTONDOWN:
                button = MouseButton.Middle;
                action = MouseAction.Down;
                break;

            case WM_MBUTTONUP:
                button = MouseButton.Middle;
                action = MouseAction.Up;
                break;

            case WM_MOUSEHWHEEL:
                action = MouseAction.None;
                if (0 < (hookStruct.mouseData >> 16 & 0xFFFF))
                {
                    button = MouseButton.WheelUp;
                }
                else
                {
                    button = MouseButton.WheelDown;
                    break;
                }
                break;

            case WM_XBUTTONDOWN:
                action = MouseAction.Down;
                switch (hookStruct.mouseData >> 16)
                {
                case 1:
                    button = MouseButton.XButton1;
                    break;

                case 2:
                    button = MouseButton.XButton2;
                    break;

                default:
                    button = MouseButton.Unknown;
                    break;
                }
                break;

            case WM_XBUTTONUP:
                action = MouseAction.Up;
                switch (hookStruct.mouseData >> 16)
                {
                case 1:
                    button = MouseButton.XButton1;
                    break;

                case 2:
                    button = MouseButton.XButton2;
                    break;

                default:
                    button = MouseButton.Unknown;
                    break;
                }
                break;

            default:
                action = MouseAction.None;
                button = MouseButton.Unknown;
                break;
            }

            return(new Tuple <MouseButton, MouseAction>(button, action));
        }