所以基本上我要做的就是将鼠标平滑地移动到中心位置。 我在这里工作得很好,但它将光标瞬间传送到中心。
此外,如果我将input.mi.time
设置为大于0的值,它会让我的PC进入睡眠状态。任何人都可以解释它甚至更多吗? documentation并没有真正为我澄清。
#include <iostream>
#include <Windows.h>
int screenWidth;
int screenHeight;
void moveMouse(int x, int y)
{
POINT mouseCoords;
GetCursorPos(&mouseCoords);
INPUT input;
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_MOVE;
input.mi.dwExtraInfo = NULL;
input.mi.mouseData = NULL;
input.mi.dx = -mouseCoords.x + x;
input.mi.dy = -mouseCoords.y + y;
input.mi.time = NULL;
SendInput(1, &input, sizeof(INPUT));
}
void main()
{
screenWidth = GetSystemMetrics(SM_CXSCREEN);
screenHeight = GetSystemMetrics(SM_CYSCREEN);
int middleOfScreenX = screenWidth / 2;
int middleOfScreenY = screenHeight / 2;
moveMouse(middleOfScreenX, middleOfScreenY);
}
答案 0 :(得分:2)
您遇到的问题与Raymond Chen在2012年的帖子中描述的完全相同:
When you synthesize input with SendInput, you are also synthesizing the timestamp(重点是我的):
当客户使用SendInput函数模拟拖放操作以进行自动测试时,客户报告了一个问题。
嗯,是的,所有事件都会立即发生,因为您一次性提交了所有事件。
time
结构中的MOUSEINPUT
字段不会导致播放延迟。
解决方案也在发布:
如果你想要三个输入事件,它们之间有500毫秒的延迟,那么你需要调用SendInput三次,在两次调用之间延迟500ms。