Exemplo n.º 1
0
        public static bool HookMouse()
        {
            if (MouseHookRegistered)
            {
                return(true);
            }

            bool result = false;

            _mouse = (int code, IntPtr wParam, IntPtr lParam) =>
            {
                NativeMethods.WMessages msg = (NativeMethods.WMessages)wParam;

                // If the code is less than 0, Windows want it to be processed without touching..
                // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx
                if (code < 0 || msg != NativeMethods.WMessages.XButtonDown)
                {
                    return(NativeMethods.CallNextHookEx(IntPtr.Zero, code, wParam, lParam));
                }

                MSLLHOOKSTRUCT data = Marshal.PtrToStructure <MSLLHOOKSTRUCT>(lParam);

                int xButton = data.mouseData >> 16;
                var button  = (XMouseButtons)xButton;
                var asKeys  = button == XMouseButtons.XButton1 ? Keys.XButton1 : Keys.XButton2;

                MouseInputArgs args = new MouseInputArgs(msg, lParam, asKeys);

                OnMouseButtonInputChanged(null, args);

                if (args.Suppress)
                {
                    return((IntPtr)1);
                }

                // Console.WriteLine($"{data.mouseData.ToString("X4")}");

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

            IntPtr hook    = NativeMethods.SetWindowsHookEx(NativeMethods.HookType.WH_MOUSE_LL, _mouse, IntPtr.Zero, 0);
            var    myerror = Marshal.GetLastWin32Error();

            if (hook == IntPtr.Zero)
            {
                // Write to file?
                // myerror
            }
            else
            {
                MouseHook           = hook;
                result              = true;
                MouseHookRegistered = true;
            }

            return(result);
        }
Exemplo n.º 2
0
 public MouseInputArgs(NativeMethods.WMessages wparam, IntPtr lparam, Keys key)
 {
     LParam = lparam;
     WParam = wparam;
     Key    = key;
 }