如何在C 屏幕上的任何可能点移动光标

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

本文关键字:任何可 移动 光标 屏幕      更新时间:2023-10-16

我编写了以下代码,当我按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。任何帮助/指导都非常感谢。预先感谢。

像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