/// <param name="nCode">A code that uses to determine how to process the message.</param> /// <param name="wParam">The identifier of the mouse message.</param> /// <param name="lParam">A pointer to an MSLLHOOKSTRUCT structure.</param> /// <returns></returns> public override FilterResult msg(int nCode, WPARAM wParam, LPARAM lParam) { if (SysMessages.Eq(wParam, SysMessages.WM_MOUSEMOVE)) { return(FilterResult.IgnoreFilters); } return(FilterResult.Continue); }
private void sendCode(TCode cmd) { if(SysMessages.Eq(cmd.wParam, CodeDown)) { sendCodeDown(); } else if(SysMessages.Eq(cmd.wParam, CodeUp)) { sendCodeUp(); } }
public override FilterResult process(int nCode, WPARAM wParam, LPARAM lParam) { if (parent.Data == null) { parent.Data = new TData(); } var v = (TData)parent.Data; lock (sync) { if (toAbortNext && SysMessages.Eq(wParam, CodeUp)) { toAbortNext = false; LSender.Send(this, $"Prevent '{wParam}' because of previous mixed code.", Message.Level.Info); return(FilterResult.Abort); } if (isBtnDown && SysMessages.Eq(wParam, CodeDown)) { toAbortNext = true; LSender.Send(this, $"Found mixed {wParam}", Message.Level.Info); parent.trigger(); return(FilterResult.Abort); } if (!v.onlyDownCodes && (isBtnUp && SysMessages.Eq(wParam, CodeUp))) { LSender.Send(this, $"Found mixed {wParam}", Message.Level.Info); parent.trigger(); return(FilterResult.Abort); } if (SysMessages.Eq(wParam, CodeDown)) { isBtnDown = true; isBtnUp = false; } else if (SysMessages.Eq(wParam, CodeUp)) { isBtnDown = false; isBtnUp = true; } #if DEBUG LSender.Send(this, $"Continue {wParam}", Message.Level.Trace); #endif return(FilterResult.Continue); } }
/// <param name="nCode">A code that uses to determine how to process the message.</param> /// <param name="wParam">The identifier of the mouse message.</param> /// <param name="lParam">A pointer to an MSLLHOOKSTRUCT structure.</param> /// <returns></returns> public override FilterResult msg(int nCode, WPARAM wParam, LPARAM lParam) { if (SysMessages.Eq(wParam, SysMessages.WM_LBUTTONDOWN)) { LSender.Send(this, $"WM_LBUTTONDOWN", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_LBUTTONUP)) { LSender.Send(this, $"WM_LBUTTONUP", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_RBUTTONDOWN)) { LSender.Send(this, $"WM_RBUTTONDOWN", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_RBUTTONUP)) { LSender.Send(this, $"WM_RBUTTONUP", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_MBUTTONDOWN)) { LSender.Send(this, $"WM_MBUTTONDOWN", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_MBUTTONUP)) { LSender.Send(this, $"WM_MBUTTONUP", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_MOUSEWHEEL)) { LSender.Send(this, $"WM_MOUSEWHEEL", Message.Level.Info); } else if (SysMessages.Eq(wParam, SysMessages.WM_MOUSEHWHEEL)) { LSender.Send(this, $"[WM_MOUSEHWHEEL]", Message.Level.Info); } //unchecked { // ++TriggerCount; //} return(FilterResult.Continue); }
public override FilterResult process(int nCode, WPARAM wParam, LPARAM lParam) { lock (sync) { var d = Delta; //LSender.Send(this, $"{wParam} - delta {d}ms", Message.Level.Trace); if (isPrevCodeDown && SysMessages.Eq(wParam, CodeUp)) { isPrevCodeDown = false; LSender.Send(this, $"Prevent '{wParam}' because of previous {CodeDown}", Message.Level.Debug); return(FilterResult.Abort); } if (isPrevCodeDown && SysMessages.Eq(wParam, CodeDown)) { isPrevCodeDown = false; LSender.Send(this, $"Expected '{CodeUp}' was not found. Reset flag.", Message.Level.Debug); } if (SysMessages.Eq(wParam, CodeDown) && d < parent.Value) { LSender.Send(this, $"Found double-click bug of '{wParam}' because of delta {d}", Message.Level.Info); isPrevCodeDown = true; parent.trigger(); updateStamp(); return(FilterResult.Abort); } if (SysMessages.Eq(wParam, CodeDown)) { updateStamp(); } return(FilterResult.Continue); } }
public override FilterResult process(int nCode, WPARAM wParam, LPARAM lParam) { //if(shadowClick) { // now it will be processed via ReCodes + lowLevelMouseProc // return FilterResult.Continue; //} if(!raisedCodeUp && SysMessages.Eq(wParam, CodeDown)) { stampCodeDown = DateTime.Now; return FilterResult.Continue; } if(raisedCodeUp && SysMessages.Eq(wParam, CodeUp)) { return FilterResult.Continue; } var delta = (DateTime.Now - stampCodeDown).TotalMilliseconds; var v = Data; if((delta > v.deltaMin && delta <= v.deltaMax) && SysMessages.Eq(wParam, CodeUp)) { LSender.Send(this, $"{CodeDown} <-{delta}-> {CodeUp}-{CodeDown} :: consider as a user click", Message.Level.Debug); return FilterResult.Continue; } if(SysMessages.Eq(wParam, CodeUp)) { raisedCodeUp = true; } buffer.Enqueue(new TCode() { nCode = nCode, lParam = lParam, wParam = wParam }); LSender.Send(this, $"'{wParam}' has been buffered ({buffer.Count})", Message.Level.Trace); if(lockedThread) { return FilterResult.Abort; } Task.Factory.StartNew(() => { lock(sync) { lockedThread = true; var cmd1 = new TCode(); while(buffer.Count > 0) { if(!buffer.TryDequeue(out cmd1)) { shortSleep(); continue; } if(SysMessages.Eq(cmd1.wParam, CodeUp)) { // now we should look possible bug: down ... [up, down] ... up waitNewCodes(); break; } if(SysMessages.Eq(cmd1.wParam, CodeDown)) { sendCodeDown(); lockedThread = false; return; } } if(SysMessages.Eq(cmd1.wParam, 0)) { raisedCodeUp = false; lockedThread = false; return; } TCode cmd2; if(buffer.Count > 0) { while(!buffer.TryDequeue(out cmd2)) { shortSleep(); } LSender.Send(this, $"Buffer > 0 :: {cmd2.wParam}", Message.Level.Trace); } else { cmd2 = new TCode(); } if(SysMessages.Eq(cmd1.wParam, CodeUp) && SysMessages.Eq(cmd2.wParam, CodeDown)) { LSender.Send(this, $"Found bug with recovering of codes {CodeUp} -> {CodeDown}", Message.Level.Info); parent.trigger(); } else { resend(cmd1, cmd2); } raisedCodeUp = false; lockedThread = false; } }); //stamp = DateTime.Now; return FilterResult.Abort; }