要实现录制鼠标的移动并记录延迟,可以使用以下步骤:

  1. 使用 Windows API 函数 GetCursorPos() 获取鼠标的当前位置,并记录下时间戳。
  2. 将鼠标位置和时间戳记录到一个数据结构中,例如一个 vector
  3. 在每个数据点之间计算时间差,记录下延迟。
  4. 将数据结构保存到文件中,以便之后可以回放。
  5. 要模拟移动,可以使用 Windows API 函数 SetCursorPos() 将鼠标移动到预设的位置。根据记录的时间戳和延迟,可以计算出移动的时间和速度。
  6. 为了还原移动过程和延迟,可以按照记录的时间戳和延迟来模拟鼠标移动。这样可以确保移动过程和延迟与录制时完全一致。

以下是一个简单的示例代码:

#include <windows.h>
#include <vector>
#include <fstream>
#include <iostream>

using namespace std;

struct MouseData {
    POINT pos;
    DWORD timestamp;
};

vector<MouseData> mouseData;

void recordMouseMovement() {
    while (true) {
        POINT pos;
        GetCursorPos(&pos);
        DWORD timestamp = GetTickCount();
        MouseData data = { pos, timestamp };
        mouseData.push_back(data);
        Sleep(10);
    }
}

void saveMouseDataToFile(const char* filename) {
    ofstream file;
    file.open(filename, ios::binary);
    if (file.is_open()) {
        int size = mouseData.size();
        file.write((char*)&size, sizeof(size));
        for (int i = 0; i < size; i++) {
            file.write((char*)&mouseData[i], sizeof(MouseData));
        }
        file.close();
    }
}

void playbackMouseMovement(const char* filename) {
    ifstream file;
    file.open(filename, ios::binary);
    if (file.is_open()) {
        int size;
        file.read((char*)&size, sizeof(size));
        for (int i = 0; i < size; i++) {
            MouseData data;
            file.read((char*)&data, sizeof(MouseData));
            DWORD delay = data.timestamp - (i > 0 ? mouseData[i - 1].timestamp : data.timestamp);
            Sleep(delay);
            SetCursorPos(data.pos.x, data.pos.y);
        }
        file.close();
    }
}

int main() {
    HANDLE thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)recordMouseMovement, NULL, 0, NULL);
    Sleep(5000); // record for 5 seconds
    TerminateThread(thread, 0);
    saveMouseDataToFile('mouse_data.bin');
    playbackMouseMovement('mouse_data.bin');
    return 0;
}
C++ 鼠标移动录制与回放:精确模拟延迟

原文地址: https://www.cveoy.top/t/topic/lWNE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录