// マウスの入力が発生したら呼び出されるメソッド 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)); }
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, uint msg, ref MSLLHOOKSTRUCT mouse);