12.3 实现模拟鼠标录制回放 您所在的位置:网站首页 录制鼠标动作脚本怎么弄 12.3 实现模拟鼠标录制回放

12.3 实现模拟鼠标录制回放

2024-07-09 23:08| 来源: 网络整理| 查看: 265

本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。

有时我们经常需要进行重复性的鼠标操作,例如繁琐的点击、拖拽。这些任务可能消耗大量时间和精力,为了解决这个问题,可自行设计并实现一个简单而强大的鼠标录制回放工具,旨在帮助用户轻松录制鼠标动作,通过借助鼠标录制回放工具,用户可以轻松实现自动化操作,从而解放双手。

首先我们需要创建一个Write_File函数,当用户每次调用该函数时都会向特定的文件内追加写入一条记录,此外还需要增加一个split函数,该函数用于将特定的一条记录根据特定的分隔符切割,保留分隔符后面的坐标信息。

// 切割字符串 int split(char dst[][32], char* str, const char* spl) { int n = 0; char* result = NULL; result = strtok(str, spl); while (result != NULL) { strcpy(dst[n++], result); result = strtok(NULL, spl); } return n; } // 每次写入一行 int Write_File(char* path, char* msg) { FILE* fp = fopen(path, "a+"); if (fp == NULL) return -1; char ch, buffer[1024]; int index = 0; while (msg[index] != '\0') { fputc(msg[index], fp); index++; } fclose(fp); return 1; }

接着我们需要实现Recording()函数部分,该函数的左右是用于捕捉当前鼠标坐标与点击事件,函数中通过调用GetCursorPos()获取当前鼠标的屏幕坐标位置,这个函数参数传递非常简单,只需要传入一个POINT类型的结构体变量,其函数原型如下所示;

BOOL GetCursorPos(LPPOINT lpPoint);

参数:

lpPoint:指向 POINT 结构的指针,用于接收鼠标的屏幕坐标位置。

返回值:

如果函数成功,返回值为非零,表示获取鼠标位置成功; 如果函数失败,返回值为零,表示获取鼠标位置失败。

POINT 结构包含了两个成员变量 x 和 y,分别表示鼠标在屏幕上的横坐标和纵坐标。

当有了当前鼠标坐标位置以后,接着就是需要获取到鼠标点击事件,鼠标点击可使用GetAsyncKeyState 获取指定虚拟键码对应的键盘键的状态,该函数原型如下所示;

SHORT GetAsyncKeyState(int vKey);

参数:

vKey:指定虚拟键码,它是一个整数,表示要获取的键的键码。

返回值:

如果指定的虚拟键处于按下状态,返回值的最高位(符号位)为 1,其余位表示次数(持续时间)。如果指定的虚拟键处于释放状态或者参数无效,返回值为 0。

GetAsyncKeyState 函数允许检测键盘中某个虚拟键的状态,无论这个虚拟键是否处于焦点的窗口中。它适用于各种应用,通过VK_LBUTTON可用于检测鼠标左键是否被按下,通过VK_RBUTTON则可用于检测鼠标右键状态。

代码的主要功能如下:

在 Recording 函数中,使用一个死循环不断检测鼠标的位置和按键状态。 使用 GetCursorPos 函数获取当前鼠标的位置,并将其保存在 x 和 y 变量中。 使用 GetAsyncKeyState 函数检测鼠标左键和右键的状态,并将其保存在 lbutton 和 rbutton 变量中。 如果当前的鼠标位置或按键状态与之前保存的值不同,表示鼠标动作发生了变化,将当前的位置和按键状态记录下来。 将记录的鼠标动作信息以字符串的形式写入脚本文件,格式为 "X:位置,Y:位置,L:左键状态,R:右键状态"。 保存当前的鼠标位置和按键状态,用于下一次循环时比较是否发生了变化。 // 录制脚本 void Recording(char *script) { int static_x = 0, static_y = 0; bool static_lbutton = 0, static_rbutton = 0; while (1) { POINT Position; GetCursorPos(&Position); int x = Position.x; int y = Position.y; bool lbutton = GetAsyncKeyState(VK_LBUTTON); bool rbutton = GetAsyncKeyState(VK_RBUTTON); if (x != static_x || y != static_y || lbutton != static_lbutton || rbutton != static_rbutton) { char szBuf[1024] = { 0 }; std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有