private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { var hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT)); var ea = new LowLevelMouseEventArgs(this) { MouseMessages = (MouseMessages)wParam, MouseEventFlags = hookStruct }; _LowLevelMouseEvent.InvokeAsync(ea); } return(CallNextHookEx(_hookID, nCode, wParam, lParam)); }
async Task OnLowLevelMousEvent(LowLevelMouseEventArgs ea) { if (ea.MouseMessages == MouseHooker.MouseMessages.WM_MOUSEWHEEL) { await this.UIThreadAsync(() => { if (!_TataruUIModel.IsChatClickThrough) { var bc = ((SolidColorBrush)this.Background).Color; if (bc.A == 0) { var data = ea.MouseEventFlags.mouseData; uint fxdData = ((data & 0xFFFF0000) >> 16); uint realData = 0; double MouseWheelScrollDelta = System.Windows.Forms.SystemInformation.MouseWheelScrollDelta; string msg = String.Empty; if (IsLowLevelMousOver(ea.MouseEventFlags.pt)) { if (fxdData < 32000) { realData = fxdData; int res = (int)Math.Round(realData / MouseWheelScrollDelta) * 2; for (int i = 0; i < res; i++) { ChatRtb.LineUp(); } } else { realData = 65536 - fxdData; int res = (int)Math.Round(realData / MouseWheelScrollDelta) * 2; for (int i = 0; i < res; i++) { ChatRtb.LineDown(); } } } } } }); } }