private IntPtr RawInputWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) { try { WindowsMessagesFlags wm = (WindowsMessagesFlags)msg; if (wm == WindowsMessagesFlags.WM_INPUT) { int size = Marshal.SizeOf(typeof(RawInput)); if (User32.GetRawInputData(lParam, RawInputCommand.Input, out RawInput raw, ref size, Marshal.SizeOf(typeof(RawInputHeader))) != -1) { var mb = raw.Data.Mouse.ButtonFlags; bool validRawMouseInputReceived = mb == RawMouseButtons.XButton1Up || mb == RawMouseButtons.XButton2Up || mb == RawMouseButtons.MouseWheel; if (validRawMouseInputReceived && this.LstHotKeys.SelectedItem is GenericHotkeyProxy hotkeyProxy && this.TxtSingleKey.IsFocused && Processes.IsCurrentProcessFocused()) { bool validButton = true; MouseAction mouseAction = 0; if (mb == RawMouseButtons.XButton1Up) { mouseAction = MouseAction.XButton1; } else if (mb == RawMouseButtons.XButton2Up) { mouseAction = MouseAction.XButton2; } else if (mb == RawMouseButtons.MouseWheel) { short delta = unchecked ((short)raw.Data.Mouse.ButtonData); if (delta > 0) // MWheelUp { mouseAction = MouseAction.MWheelUp; } else if (delta < 0) // MWheelDown { mouseAction = MouseAction.MWheelDown; } } else { validButton = false; } if (validButton && Enum.IsDefined(typeof(MouseAction), mouseAction)) { this.UpdateHotkeyActivator(hotkeyProxy, HotkeyType.MouseHook, mouseAction, mouseAction.ToString()); } } } } return(IntPtr.Zero); } catch (Exception e) { logger.Error("Error", e); return(IntPtr.Zero); } }
private IntPtr MouseHookProc(int nCode, WindowsMessagesFlags wParam, LowLevelMouseHookStruct lParam) { if (nCode >= 0) { if (this.LstHotKeys.SelectedItem is GenericHotkeyProxy hotkeyProxy && this.TxtSingleKey.IsFocused && Processes.IsCurrentProcessFocused()) { bool validButton = false; MouseAction mouseAction = 0; var union = new Union32(lParam.mouseData); if (wParam == WindowsMessagesFlags.WM_XBUTTONUP) // XButton { if (union.High == 0x0001) { validButton = true; mouseAction = MouseAction.XButton1; } else if (union.High == 0x0002) { validButton = true; mouseAction = MouseAction.XButton2; } } else if (wParam == WindowsMessagesFlags.WM_MOUSEWHEEL) // MWheel { short delta = unchecked ((short)union.High); if (delta > 0) { // MWheelUp validButton = true; mouseAction = MouseAction.MWheelUp; } else if (delta < 0) { // MWheelDown validButton = true; mouseAction = MouseAction.MWheelDown; } } if (validButton && Enum.IsDefined(typeof(MouseAction), mouseAction)) { this.UpdateHotkeyActivator(hotkeyProxy, HotkeyType.MouseHook, mouseAction, mouseAction.ToString()); } } } return(User32.CallNextHookEx(this.hHook, nCode, wParam, lParam)); }