我需要模拟鼠标点击应用程序窗口。我正在使用Windows系统。
如何向应用程序窗口所在的屏幕坐标 x, y
发送左键鼠标单击事件?
使用SendInput()函数:
INPUT Inputs[3] = {0};
Inputs[0].type = INPUT_MOUSE;
Inputs[0].mi.dx = ...; // desired X coordinate
Inputs[0].mi.dy = ...; // desired Y coordinate
Inputs[0].mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
Inputs[1].type = INPUT_MOUSE;
Inputs[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
Inputs[2].type = INPUT_MOUSE;
Inputs[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(3, Inputs, sizeof(INPUT));
使用MOUSEEVENTF_ABSOLUTE
在多监视器环境中正确指定dx
和dy
的方法,请务必阅读MOUSEINPUT
文档中的注释。
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
MOUSEEVENTF_ABSOLUTE
标志,因此它们是相对于第一个输入所确定的鼠标位置的。文档中已经说明了这一点:“如果未指定MOUSEEVENTF_ABSOLUTE值,则dx和dy指定相对于上一个鼠标事件(最后报告的位置)的移动。”所以第二个和第三个输入中的dx和dy为0是可以的。 - undefinedMOUSEINPUT
的文档详细解释了如何指定鼠标坐标,例如:"如果指定了MOUSEEVENTF_ABSOLUTE
值,则dx
和dy
包含介于0和65,535之间的归一化绝对坐标。事件过程将这些坐标映射到显示表面上。坐标(0,0)映射到显示表面的左上角;坐标(65535,65535)映射到右下角。在多显示器系统中,这些坐标将映射到主显示器。" - undefined