如何在 C++ 中将光标移动到屏幕上的任何可能点?

How to move cursor at any possible point on the screen in C++?

我编写了以下代码,当我按下 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 以防它们可能以任何方式相关。任何 help/guidance 非常感谢。提前致谢。

就像 Y.S 说的那样检查 MOUSEEVENTF_ABSOLUTE 和 MOUSEMOVEPOINT。

dwFlags改变了dx和dy的含义。但是你永远不需要浮动值。

如果指定了 MOUSEEVENTF_ABSOLUTE 值,dx 和 dy 包含 0 到 65,535 之间的归一化绝对坐标。事件过程将这些坐标映射到显示表面上。坐标(0,0)映射到显示面的upper-left角;坐标 (65535,65535) 映射到 lower-right 角。

如果未设置此标志,则鼠标从先前位置移动 dx 像素和 dy 像素。

来自 : https://msdn.microsoft.com/en-us/library/windows/desktop/ms646273(v=vs.85).aspx