【问题标题】:SendInput() mouse movement calculation?SendInput() 鼠标移动计算?
【发布时间】:2020-02-17 19:06:25
【问题描述】:

我正在使用SendInput() 进行鼠标移动,它需要INPUT 结构。我正在使用相对运动,在关于这个结构的docs 中,在备注中它说:

鼠标的相对运动受鼠标速度和两鼠标阈值的影响。

所以我的问题是,这是什么以及如何计算(公式是什么)?未指定。

我尝试搜索它,但没有运气。希望有人知道。

我需要这些信息,因为我试图使鼠标移动独立于实际的 Windows 光标速度。在文档中,它清楚地表明这受这些值的影响。

【问题讨论】:

  • 改用绝对定位。
  • 没有公开此信息的 API,也没有关于鼠标移动实现细节的文档。正如 Jonathan 指出的那样,您也不需要。
  • @JonathanPotter 我知道我可以使用absolute,但我将它用于全屏应用程序并且为了能够将该信息写入游戏窗口,我必须获得相同或更高的完整性级别(UIPI),但由于限制,我不能这样做。
  • @IInspectable "没有暴露此信息的 API" - are you sure?
  • @xxt:使用绝对定位而不是相对定位如何引入任何 UIPI 约束?如果您无法通过绝对定位越过 UIPI 边界,那么您也无法通过相对定位越过它。如果您不想使用SendInput,则必须从您的问题中说明这一点。正如所写,没有任何迹象表明您不想使用该 API。

标签: c++ windows winapi input mouse


【解决方案1】:
  • 相对值

相对鼠标运动受鼠标速度和鼠标速度的影响 两鼠标阈值。 所以我的问题是,这个是什么以及如何计算的(什么是 公式)?未指定。

计算方法在remarks of MOUSEINPUT structure document中说明如下:

系统对指定的相对鼠标移动应用两个测试。如果沿 x 或 y 轴的指定距离是 大于第一个鼠标阈值,鼠标速度为 不为零,系统将距离加倍。如果指定距离 沿 x 或 y 轴大于第二个鼠标 阈值,鼠标速度等于二,系统 应用第一个阈值导致的距离加倍 测试。因此,系统可以多次指定 鼠标沿 x 或 y 轴的相对移动最多四次。

为了防止系统将距离加倍或将指定的鼠标沿 x 或 y 轴的相对移动最多乘以四倍,例如,您可以保持指定的鼠标相对移动小于或等于第一个鼠标阈值,并将鼠标速度设置为零。请测试看看这是否符合您的要求。

关于 UIPI 限制,由于您的应用程序已经以管理员权限运行,因此它具有较高的强制级别,因此除非您的目标应用程序以 system integrity level 运行,否则这不会成为问题。

  • 绝对值

并且不受 UIPI 限制,您还可以使用不受鼠标速度和双鼠标阈值影响的绝对值

【讨论】:

  • 你不正确这不是实际移动的计算,这用于鼠标加速选项..
  • @xXTurner 但它根据鼠标阈值和鼠标速度确定距离。我没有看到任何与加速有关的内容。
  • 这是鼠标加速时的距离ON它没有说明任何关于它的关闭
  • @xXTurner 在检查mouse_event 的文件后使用“鼠标加速级别”。所以你认为我的回答中的鼠标速度鼠标加速,对吗?但是系统将距离加倍需要我的回答中描述的两个条件。如果其中一个条件不满足,系统将不会加倍距离。您在测试过程中是否发现任何问题?
  • 对不起,我不认为你理解我的意思,我的意思是这个具有 2 倍和 4 倍乘法的 功能 仅在鼠标加速选项打开时才会出现,如果它关闭这是无关紧要的,因此它不适用于您的鼠标移动。希望这次我更清楚
猜你喜欢
  • 2015-10-15
  • 1970-01-01
  • 2018-07-13
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多