Esempio n. 1
0
        // マウスの入力が発生したら呼び出されるメソッド
        IntPtr MouseCallback(int nCode, uint wParam, ref MSLLHOOKSTRUCT lParam)
        {
            // MSLLHOOKSTRUCTについてはこちらを参照
            // https://docs.microsoft.com/ja-jp/windows/win32/api/winuser/ns-winuser-msllhookstruct

            // アプリケーションによって入力されたかどうか
            var isInjected = (lParam.Flags & 0x1) == 1;

            // マウスの移動があったら
            if (wParam == Native.WM_MOUSE_MOVE)
            {
                var x = lParam.Point.X;
                var y = lParam.Point.Y;
                Console.WriteLine($"[{isInjected}]{x}, {y}");
                // キャンセルする場合は return (IntPtr)1;
                return(Native.CallNextHookEx(_mouseHookHandle, nCode, wParam, ref lParam));
            }

            // マウススクロールされたら
            if (wParam == Native.WM_WHEEL)
            {
                if (lParam.MouseData > 0)
                {
                    Console.WriteLine($"[{isInjected}]スクロールアップ");
                }
                else
                {
                    Console.WriteLine($"[{isInjected}]スクロールダウン");
                }

                // キャンセルする場合は return (IntPtr)1;
                return(Native.CallNextHookEx(_mouseHookHandle, nCode, wParam, ref lParam));
            }

            // マウスの値(Keys)と 押されたかどうかを取得する
            var(button, isPressed) = wParam switch
            {
                Native.WM_LEFT_DOWN => (Keys.LButton, true),
                Native.WM_LEFT_UP => (Keys.LButton, false),
                Native.WM_RIGHT_DOWN => (Keys.RButton, true),
                Native.WM_RIGHT_UP => (Keys.RButton, false),
                Native.WM_MIDDLE_DOWN => (Keys.MButton, true),
                Native.WM_MIDDLE_UP => (Keys.MButton, false),
                Native.WM_XBUTTON_DOWN => (lParam.MouseData >> 16) == 1 ? (Keys.XButton1, true) : (Keys.XButton2, true),
                Native.WM_XBUTTON_UP => (lParam.MouseData >> 16) == 1 ? (Keys.XButton1, false) : (Keys.XButton2, false),
                _ => (Keys.None, false),
            };

            Console.WriteLine($"[{isInjected}, {isPressed}]{button}");

            // キャンセルする場合は return (IntPtr)1;
            return(Native.CallNextHookEx(_mouseHookHandle, nCode, wParam, ref lParam));
        }
Esempio n. 2
0
 public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, uint msg, ref MSLLHOOKSTRUCT mouse);