鼠标输入:MOUSEEVENTF_MOVE移动不根据dx,dy

mouse input: MOUSEEVENTF_MOVE moving not according to dx, dy

本文关键字:dx dy 移动 输入 MOUSEEVENTF MOVE 鼠标      更新时间:2023-10-16

在下面的代码中,我的鼠标光标应该在屏幕上设置为(100100)。然而,事实证明光标已移动到(2,1)。

当未设置MOUSEEVENTF_ABSOLUTE时,我预计鼠标会分别向右和向下移动100个像素。而结果是它从(35265)移动到(670383)。

INPUT Input[1];
ZeroMemory(Input, sizeof(INPUT) * 1);
Input[0].type = INPUT_MOUSE;
Input[0].mi.dx = 100;
Input[0].mi.dy = 100;
Input[0].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
SendInput(1, Input, sizeof(INPUT));

我读过的帖子:

我意识到还有另一篇关于类似情况的帖子。但我怀疑内存泄漏是否是答案,因为我使用cout来检查Input[0].mi.dxInput[0].mi.dy的值,并且它们正是100

根据这里投票最多的帖子的解决方案,使用因子来修改xy值。即便如此,结果也不符合您的输入。答案并没有解释为什么需要使用一个因素。

我的问题:

1) 使用SetCursorPos()在Windows中移动光标的准确方法是什么?(我不想使用它是有原因的)

2) 有人知道MOUSEEVENTF_MOVE不合理运动背后的原因吗?

在QT中如何找到鼠标位置:我目前正在制作一个大量使用QMouseMoveEvent的程序。

因此,一步一步地,让我们创建一个新的项目,使用一个空白的MainMenu表单。点击一个新标签,这样我们就可以看到X和Y坐标的变化。

这适用于QT创建一个新函数并将其称为

void MainWindow::mouseMoveEvent(QMouseEvent*事件),请确保也将其添加到.h中!

然后使用事件变量创建一个指向它的指针。QPoint pos=event->pos();

然后执行位置x()、位置y();把它们放进你的标签/输出中,我们就开始了!

然后用它们来做你想做的事。

我希望这是你想要的答案!

如果你需要更多帮助,我可以将你链接到我的GitHub回购,你可以查看我在X Y职位和Lat-Lon to X Y方面的一些工作;

同样作为最后一件事,如果你想做Lat Lon到X Y,这是

X是当前鼠标的X坐标;Y是当前鼠标Y坐标;

double lat=(y*180)/("场景像素高度")-90

double-lon=(x*360)/("场景像素宽度")-180

最后一件事是在QT中设置位置,只需使用

QCursor my_cursor;my_cursor.setPos(X,Y);

不确定是否获得Dx/Dy,但这是一个小例子,可以帮助您了解更多信息。无论如何,我希望我所做的对有帮助

您是否考虑到X/Y坐标从左上角的0,0开始?

你在用什么Complier?当我们不知道需要使用什么库来解决这个问题时,很难解决这个问题。

因为如果这是在QT,这是一个简单的解决方案。但我不太确定是否要在MFC或其他C++GUI中使用它。

更多细节会很好:)-回复我,我会再看看你的问题

脑海中浮现出几件事:

int CURSOR_X;
int CURSOR_Y;
int mousex;
int mousey;
CURSOR_X = 100;
CURSOR_Y = 100; 
SetCursorPos(CURSOR_X, CURSOR_Y);
mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_MOVE, 100, mousex, mousey, 100);