// ------------------------------------------------------------------------- private bool ShouldBlockWheel(InputOptionsInfo info) { var options = _inputHookOptions.inputInfo; if ((!options.wheelDown || !info.wheelDown) && (!options.wheelUp || !info.wheelUp)) { return(false); } return(options.controlPressed == info.controlPressed && options.shiftPressed == info.shiftPressed); }
/// <summary> /// This is called on another thread /// </summary> /// <param name="info"></param> /// <returns></returns> private bool OnllMouseHook_WheelInputEvent(InputOptionsInfo info) { if (_inputHookOptions == null) { return(false); } lock (this) { if (!_nativeWindow.IsWindowInForeground() || !ShouldBlockWheel(info)) { return(false); } // TODO: Consider running this callback on a separate thread // so that the input doesn't become laggy onMouseWheelBlocked?.Invoke(info); return(true); } }
/// <summary> /// /// </summary> /// <param name="mouseLowLevelHook"></param> /// <returns></returns> private InputOptionsInfo ExtractInfo(MSLLHOOKSTRUCT mouseLowLevelHook) { var info = new InputOptionsInfo(); int delta = ((short)(mouseLowLevelHook.mouseData >> 16)); info.wheelUp = (delta == 120); info.wheelDown = (delta == -120); if (!info.wheelUp && !info.wheelDown) { return(info); } info.controlPressed = (GetKeyState(VirtualKeyStates.VK_CONTROL) & 0x8000) > 0; info.shiftPressed = (GetKeyState(VirtualKeyStates.VK_SHIFT) & 0x8000) > 0; return(info); }