C++ MOUSEEVENTF_MOVE relative

C++ MOUSEEVENTF_MOVE relative

本文关键字:relative MOVE MOUSEEVENTF C++      更新时间:2023-10-16

我正在尝试使用以下代码在屏幕上移动光标:

input.type = INPUT_MOUSE;
ZeroMemory(&input, sizeof(input));
input.mi.mouseData = 0;
input.mi.time = 0;
input.mi.dx = 20;
input.mi.dy = 20;
input.mi.dwExtraInfo = 0;
input.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));

问题是,光标像这样移动(当前 pos | new pos [我用"GetCursorPos()"函数获得坐标]):

0 0 | 41 41
41 41 | 108 108
108 108 | 174 174
174 174 | 241 241
241 241 | 307 307
307 307 | 374 374
374 374 | 441 441

有人可以帮我吗?

系统可能会合并鼠标移动,因为您没有指定MOUSEEVENTF_MOVE_NOCOALESCE

更重要的是,您正在指定原始鼠标移动,系统可以对其进行调整,如文档中所述。

相对鼠标运动受鼠标速度和 双鼠标阈值。[...]如果指定的距离沿 X 轴或 Y 轴大于鼠标第一个阈值 值,并且鼠标速度不为零,则系统将 距离。如果沿 x 轴或 y 轴的指定距离为 大于第二个鼠标阈值,鼠标速度为 等于 2,系统将由此产生的距离加倍 应用第一个阈值测试。因此,系统是可能的 将指定的鼠标沿 x 轴或 y 轴的相对移动乘以 最多四次。

我最近遇到了同样的问题。我通过在Control Panel -> Mouse Properties -> Pointer Options -> Enhance pointer precision中修改窗口鼠标属性来解决它,取消选中它。之后,所有 win32 API 鼠标事件就像一个魅力一样工作。