Ejemplo n.º 1
0
        private IntPtr LowLevelHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            var passThrough = nCode != 0;

            if (passThrough)
            {
                return(HookNativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
            }

            var callbackData = new InputEventData
            {
                Message = (int)wParam,
                Data    = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct))
            };

            //Debug.WriteLine(
            //    $@"LowLevelInput {(Keys)callbackData.Data.VirtualKeyCode} {callbackData.Data.ScanCode} {callbackData.Data.Flags} {
            //            KeyUtils.GetDeviceKey(
            //                (Keys)callbackData.Data.VirtualKeyCode, callbackData.Data.ScanCode,
            //                ((ScanCodeFlags)callbackData.Data.Flags).HasFlag(ScanCodeFlags.E0))
            //        }", "InputEvents");

            Input?.Invoke(this, callbackData);

            if (callbackData.Intercepted)
            {
                return(new IntPtr(-1));
            }
            return(HookNativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
        }
        protected override IntPtr HookTrigger(int nCode, IntPtr wParam, IntPtr lParam)
        {
            KeyboardMessages    keyboardMessage     = (KeyboardMessages)wParam.ToInt32();
            KeyboardMessageData keyboardMessageData = (KeyboardMessageData)Marshal.PtrToStructure(lParam, typeof(KeyboardMessageData));
            var keyboardEventArgs = new KeyboardEventArgs(keyboardMessage, keyboardMessageData.VkCode);

            switch (keyboardMessage)
            {
            case KeyboardMessages.WM_KEYDOWN:
                this.KeyDown?.Invoke(this, keyboardEventArgs);
                break;

            case KeyboardMessages.WM_KEYUP:
                this.KeyUp?.Invoke(this, keyboardEventArgs);
                break;

            case KeyboardMessages.WM_SYSKEYDOWN:
                this.SystemKeyDown?.Invoke(this, keyboardEventArgs);
                break;

            case KeyboardMessages.WM_SYSKEYUP:
                this.SystemKeyUp?.Invoke(this, keyboardEventArgs);
                break;
            }

            this.Action?.Invoke(this, keyboardEventArgs);

            return(HookNativeMethods.CallNextHookEx((int)HookId.WH_KEYBOARD_LL, nCode, wParam, lParam));
        }
Ejemplo n.º 3
0
        protected override IntPtr HookTrigger(int nCode, IntPtr wParam, IntPtr lParam)
        {
            var mouseMessage = (MouseMessages)wParam.ToInt32();
            MouseMessageData mouseMessageData = (MouseMessageData)Marshal.PtrToStructure(lParam, typeof(MouseMessageData));
            var eventArgs = new MouseEventArgs(mouseMessage, mouseMessageData.Point);

            switch (mouseMessage)
            {
            case MouseMessages.WM_LBUTTONDOWN:
                this.LeftButtonDown?.Invoke(this, eventArgs);
                break;

            case MouseMessages.WM_LBUTTONUP:
                this.LeftButtonUp?.Invoke(this, eventArgs);
                break;

            case MouseMessages.WM_MOUSEMOVE:
                this.Move?.Invoke(this, eventArgs);
                break;

            case MouseMessages.WM_MOUSEWHEEL:
                this.WheelRotate?.Invoke(this, eventArgs);
                break;

            case MouseMessages.WM_MOUSEHWHEEL:
                this.HorizontalWheelRotate?.Invoke(this, eventArgs);
                break;

            case MouseMessages.WM_RBUTTONDOWN:
                this.RightButtonDown?.Invoke(this, eventArgs);
                break;

            case MouseMessages.WM_RBUTTONUP:
                this.RightButtonUp?.Invoke(this, eventArgs);
                break;
            }

            this.Action?.Invoke(this, eventArgs);

            return(HookNativeMethods.CallNextHookEx((int)HookId.WH_MOUSE_LL, nCode, wParam, lParam));
        }
Ejemplo n.º 4
0
 private static IntPtr CallNextHookEx(int nCode, IntPtr wParam, IntPtr lParam)
 {
     return(HookNativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
 }
Ejemplo n.º 5
0
 private int CallNextHook(int nCode, int wParam, IntPtr lParam)
 {
     return(HookNativeMethods.CallNextHookEx(HookHandle, nCode, wParam, lParam));
 }