如何在C#WPF中消除鼠标移动中的像素噪声

如何在C#WPF中消除鼠标移动中的像素噪声,c#,wpf,mouse,C#,Wpf,Mouse,当我没有远程控制鼠标时,我得到了鼠标停止的时刻,但现在我远程控制光标。现在,我无法得到鼠标停止的时刻,因为它从未完全停止,它总是移动一点点。我的想法是添加一些偏移像素。例如5px,即使鼠标在5px左右移动,它也会说鼠标停止了 这是捕获鼠标停止瞬间的代码的一部分。它会触发计时器。我没有把计时器代码放在这里 mouse = new MouseKeyboardActivityMonitor.MouseHookListener(new GlobalHooker()); mouse.MouseMove

当我没有远程控制鼠标时,我得到了鼠标停止的时刻,但现在我远程控制光标。现在,我无法得到鼠标停止的时刻,因为它从未完全停止,它总是移动一点点。我的想法是添加一些偏移像素。例如5px,即使鼠标在5px左右移动,它也会说鼠标停止了

这是捕获鼠标停止瞬间的代码的一部分。它会触发计时器。我没有把计时器代码放在这里

 mouse = new MouseKeyboardActivityMonitor.MouseHookListener(new GlobalHooker());
 mouse.MouseMove += (sd, args) =>
 {
      movingCount = 0;
      mouseLeft = args.X; //set the window.left to mouseLeft before showing it
      mouseTop = args.Y; //set the window.top to mouseTop before showing it
 };

 mouse.Enabled = true;

关于鼠标不停而是在5像素左右移动的时刻,您有什么想法?

如评论中所要求,这里有一个示例:

您可以使用系统参数MinimumVerticalDragDistance和MinimumHorizontalDragDistance

请看这里:

它们最初用作DragDrop操作中的阈值,用于检测拖动是否真正开始,或者用户是否只是单击鼠标指针并将其移动很小的距离

以下是它的使用方法:

private Point _lastPosition;

private void Window_MouseMove(object sender, MouseEventArgs e)
{
  Point currentPosition = e.GetPosition(this);

  if (IsMovementBigEnough(_lastPosition, currentPosition))
  {
    // .. do stuff here 
  }

  _lastPosition = currentPosition;
}

public bool IsMovementBigEnough(Point previousMousePosition, Point currentPosition)
{
  return (Math.Abs(currentPosition.X - previousMousePosition.X) >= SystemParameters.MinimumHorizontalDragDistance ||
       Math.Abs(currentPosition.Y - previousMousePosition.Y) >= SystemParameters.MinimumVerticalDragDistance);
}

HTH

您可以使用SystemParameters.MinimumVerticalDragDistance/SystemParameters.MinimumHorizontalDragDistance这些值可以用来确定鼠标在拖动过程中的移动是否足够大,可以算作“移动”。我很确定这也可以用于您的环境。优点是这个值是在windows中连接的。感谢您提供的信息,您能提供一些链接或一些示例代码来实现这一点吗?然后我就能知道如何使用它,因为我在这方面是新手:S。。。再次感谢…谢谢你的代码…现在一切都混乱了。因为,在我的代码中,当鼠标停止时,我正在用“代码中的args”触发计时器,现在我无法用您的代码获取它,对吗?可能,此代码无法工作…:S