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

时间:2015-02-12 08:21:30

标签: c++ mouseevent msdn

在下面的代码中,预计我的鼠标光标将在屏幕上设置为(100,100)。但是,事实证明光标移动到(2,1)。

如果未设置MOUSEEVENTF_ABSOLUTE,我预计鼠标将分别向右和向下移动100个像素。结果是它从(352,65)移动到(670,383)。

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));

帖子我读过:

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

根据here中最高投票帖子的解决方案,使用因子来修改xy值。即便如此,结果也不准确。答案并没有解释为什么需要使用一个因素。

我的问题:

1)使用SetCursorPos()在Windows旁边移动光标的准确方法是什么? (我有理由不想使用它)

2)有没有人知道MOUSEEVENTF_MOVE无理移动背后的原因?

3 个答案:

答案 0 :(得分:1)

好的,在QT中如何找到鼠标位置:我正在制作一个使用QMouseMoveEvent Quite的程序。

因此,我们一步一步地创建一个具有空白MainMenu表单的新项目。向下拉一个新标签,这样我们就可以看到X Y coords的变化。

这适用于QT创建一个新功能并调用它

void MainWindow :: mouseMoveEvent(QMouseEvent * event),请务必将其添加到.h中!

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

然后做pos.x(),pos.y();并将它们放入您的标签/输出中,然后我们就去了!

然后使用它们coords按照你的意愿去做。

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

如果您需要更多帮助,我可以将您链接到我的GitHub仓库,您可以查看我在X Y位置和Lat Lon到X Y的一些工作;

如果你想将Lat Lon做到X Y,那么这也是最后一件事

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

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

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

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

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

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

答案 1 :(得分:0)

你是否考虑到X / Y Coords从左上角的0,0开始?

你使用什么编码器? 当我们不知道我们需要使用哪些库来解决这个问题时,很难解决问题。

因为如果这是QT中的一个简单修复。但我不太确定在MFC或其他C ++ GUI中使用它。

更多细节会很好:) - 回到我身边再看看你的问题

答案 2 :(得分:0)

我想到了几件事:

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);