当我按TAB键
时,我编写了以下代码以将鼠标移动到屏幕上的任何位置#define WINVER 0x0500
#include <windows.h>
#include <Winuser.h>
int main() {
while(true) {
//mi0 to move mouse to top left corner of screen
INPUT mi0[1] = {0};
mi0[0].type = INPUT_MOUSE;
mi0[0].mi.dx = -99999; // desired X coordinate
mi0[0].mi.dy = -99999; // desired Y coordinate
mi0[0].mi.dwFlags = MOUSEEVENTF_MOVE;
//mi1 to move mouse and click
INPUT mi1[3] = {0};
mi1[0].type = INPUT_MOUSE;
mi1[0].mi.dx = 1; // desired X coordinate
mi1[0].mi.dy = 1; // desired Y coordinate
mi1[0].mi.dwFlags = MOUSEEVENTF_MOVE;
mi1[1].type = INPUT_MOUSE;
mi1[1].mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
mi1[2].type = INPUT_MOUSE;
mi1[2].mi.dwFlags = MOUSEEVENTF_LEFTUP;
if (GetKeyState(VK_TAB) & 0x8000 ) {
Sleep(300);
SendInput(1, mi0, sizeof(INPUT));
Sleep(300);
SendInput(3, mi1, sizeof(INPUT));
}}}
除了dy和dx只能是整数,并且像1.9或1.1这样的值被读为1时,这种方法工作正常,因为它占据了很长的移动长度,所以我基本上只限于屏幕上的一些点。如何解决此问题并将鼠标移动到屏幕上的任何位置。我使用Notepad ++和MinGW,以防任何可能相关的情况。任何帮助/指导非常感谢。提前谢谢。
答案 0 :(得分:2)
与Y.S一样,请检查MOUSEEVENTF_ABSOLUTE和MOUSEMOVEPOINT。
dwFlags改变了dx和dy的含义。但你永远不需要浮动价值。
如果指定了MOUSEEVENTF_ABSOLUTE值,则dx和dy包含0到65,535之间的归一化绝对坐标。事件过程将这些坐标映射到显示表面上。坐标(0,0)映射到显示表面的左上角;坐标(65535,65535)映射到右下角。
如果未设置此标志,则鼠标移动前一个位置的dx像素和dy像素。
来自: https://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx