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)); }
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)); }
private static IntPtr CallNextHookEx(int nCode, IntPtr wParam, IntPtr lParam) { return(HookNativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam)); }
private int CallNextHook(int nCode, int wParam, IntPtr lParam) { return(HookNativeMethods.CallNextHookEx(HookHandle, nCode, wParam, lParam)); }