ToB企服应用市场:ToB评测及商务社交产业平台

标题: 12.3 实现模拟鼠标录制回放 [打印本页]

作者: 三尺非寒    时间: 2023-10-19 14:59
标题: 12.3 实现模拟鼠标录制回放
本节将向读者介绍如何使用键盘鼠标操控模拟技术,键盘鼠标操控模拟技术是一种非常实用的技术,可以自动化执行一些重复性的任务,提高工作效率,在Windows系统下,通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的操作。
有时我们经常需要进行重复性的鼠标操作,例如繁琐的点击、拖拽。这些任务可能消耗大量时间和精力,为了解决这个问题,可自行设计并实现一个简单而强大的鼠标录制回放工具,旨在帮助用户轻松录制鼠标动作,通过借助鼠标录制回放工具,用户可以轻松实现自动化操作,从而解放双手。
首先我们需要创建一个Write_File函数,当用户每次调用该函数时都会向特定的文件内追加写入一条记录,此外还需要增加一个split函数,该函数用于将特定的一条记录根据特定的分隔符切割,保留分隔符后面的坐标信息。
  1. // 切割字符串
  2. int split(char dst[][32], char* str, const char* spl)
  3. {
  4.     int n = 0;
  5.     char* result = NULL;
  6.     result = strtok(str, spl);
  7.     while (result != NULL)
  8.     {
  9.         strcpy(dst[n++], result);
  10.         result = strtok(NULL, spl);
  11.     }
  12.     return n;
  13. }
  14. // 每次写入一行
  15. int Write_File(char* path, char* msg)
  16. {
  17.     FILE* fp = fopen(path, "a+");
  18.     if (fp == NULL) return -1;
  19.     char ch, buffer[1024];
  20.     int index = 0;
  21.     while (msg[index] != '\0')
  22.     {
  23.         fputc(msg[index], fp);
  24.         index++;
  25.     }
  26.     fclose(fp);
  27.     return 1;
  28. }
复制代码
接着我们需要实现Recording()函数部分,该函数的左右是用于捕捉当前鼠标坐标与点击事件,函数中通过调用GetCursorPos()获取当前鼠标的屏幕坐标位置,这个函数参数传递非常简单,只需要传入一个POINT类型的结构体变量,其函数原型如下所示;
  1. BOOL GetCursorPos(LPPOINT lpPoint);
复制代码
参数:
返回值:
POINT 结构包含了两个成员变量 x 和 y,分别表示鼠标在屏幕上的横坐标和纵坐标。
当有了当前鼠标坐标位置以后,接着就是需要获取到鼠标点击事件,鼠标点击可使用GetAsyncKeyState 获取指定虚拟键码对应的键盘键的状态,该函数原型如下所示;
  1. SHORT GetAsyncKeyState(int vKey);
复制代码
参数:
返回值:
GetAsyncKeyState 函数允许检测键盘中某个虚拟键的状态,无论这个虚拟键是否处于焦点的窗口中。它适用于各种应用,通过VK_LBUTTON可用于检测鼠标左键是否被按下,通过VK_RBUTTON则可用于检测鼠标右键状态。
代码的主要功能如下:
[code]// 录制脚本void Recording(char *script){    int static_x = 0, static_y = 0;    bool static_lbutton = 0, static_rbutton = 0;    while (1)    {        POINT Position;        GetCursorPos(&osition);        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




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4