c++ - 如何模拟鼠标移动

标签 c++ windows simulation

如何模拟导致指针向左移动 500 像素的鼠标事件,然后使用 C++ 进行单击。我该怎么做这样的事情?

最佳答案

下面是一些修改过的 Win32 代码:

#define WIN32_LEAN_AND_MEAN
#define _WIN32_WINNT 0x0500

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <string.h>
#include <windows.h>


#define X 123
#define Y 123
#define SCREEN_WIDTH 1024
#define SCREEN_HEIGHT 800


void MouseSetup(INPUT *buffer)
{
    buffer->type = INPUT_MOUSE;
    buffer->mi.dx = (0 * (0xFFFF / SCREEN_WIDTH));
    buffer->mi.dy = (0 * (0xFFFF / SCREEN_HEIGHT));
    buffer->mi.mouseData = 0;
    buffer->mi.dwFlags = MOUSEEVENTF_ABSOLUTE;
    buffer->mi.time = 0;
    buffer->mi.dwExtraInfo = 0;
}


void MouseMoveAbsolute(INPUT *buffer, int x, int y)
{
    buffer->mi.dx = (x * (0xFFFF / SCREEN_WIDTH));
    buffer->mi.dy = (y * (0xFFFF / SCREEN_HEIGHT));
    buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE);

    SendInput(1, buffer, sizeof(INPUT));
}


void MouseClick(INPUT *buffer)
{
    buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
    SendInput(1, buffer, sizeof(INPUT));

    Sleep(10);

    buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);
    SendInput(1, buffer, sizeof(INPUT));
}


int main(int argc, char *argv[])
{
    INPUT buffer[1];

    MouseSetup(&buffer);

    MouseMoveAbsolute(&buffer, X, Y);
    MouseClick(&buffer);

    return 0;
}

在使用之前,您需要调用 MouseSetup()每个 INPUT 缓冲区。

Resources

MSDN - SendInput()
MSDN - INPUT
MSDN - MOUSEINPUT

关于c++ - 如何模拟鼠标移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492529/

相关文章:

node.js - Electron 原生插件在Windows上失败

javascript - 尝试在有丝 split 模拟中模拟细胞的 split

C++模拟鼠标左键点击最小化程序

c++ - 高效的switch语句

c++ - FLTK Hello World 字体异常

c++ - 在 Windows 上捕获访问冲突

verilog - 在包含文件路径中使用环境变量

c++ - XOR 加密字符串并将其保存在文本文件中时 PC 发出哔哔声

c++ - 从具有相同基类的另一个派生类调用派生类的非常量方法

windows - 挂起一个线程比让它等待有什么好处吗?