如何正确覆盖其他应用程序中的鼠标事件 (Windows)?

How to properly override mouse events in other apps (Windows)?

我正在尝试使用鼠标中键实现系统范围内的拖动操作。它应该覆盖其他程序中的鼠标中键拖动行为。目前,我正在使用系统范围的挂钩处理全局鼠标事件。

问题是 - 许多程序仍然接收和处理相同的事件,就像我没有拦截它们一样。

这是我尝试过的:

我需要的是:当用户按住鼠标中键并开始拖动时,应该调用我的拖动处理程序,并且不会发生其他处理程序,如文件拖动、滚动等。

我最终得到了一个有点老套的解决方案:

  • 不为中间按钮调用鼠标按下的下一个钩子
  • 记录按下的位置
  • 在处理鼠标弹起时,如果用户没有拖动 - 使用 SendInput 从单独的线程重播整个鼠标弹起 + 鼠标按下(以避免由于重入造成的死锁)