当前位置: 首页 > news >正文

自学摄影教程的网站有哪些中国建设银行个人登录

自学摄影教程的网站有哪些,中国建设银行个人登录,搜狗网站做滤芯怎么样,商业网站开发本节将向读者介绍如何使用键盘鼠标操控模拟技术#xff0c;键盘鼠标操控模拟技术是一种非常实用的技术#xff0c;可以自动化执行一些重复性的任务#xff0c;提高工作效率#xff0c;在Windows系统下#xff0c;通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的…本节将向读者介绍如何使用键盘鼠标操控模拟技术键盘鼠标操控模拟技术是一种非常实用的技术可以自动化执行一些重复性的任务提高工作效率在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 X轴 x Y轴 y 鼠标左键 lbutton 鼠标右键 rbutton std::endl;sprintf(szBuf, X:%d,Y:%d,L:%d,R:%d\n, x, y, lbutton, rbutton);Write_File((char*)script, szBuf);static_x x;static_y y;static_lbutton lbutton;static_rbutton rbutton;}} }接着我们继续封装Play()回放功能该功能的实现原理与录制保持一致通过逐条读取传入文件中的参数并调用SetCursorPos实现鼠标位置的移动操作该函数与获取参数传递保持一致这里我们需要注意mouse_event函数该函数用于模拟鼠标的各种事件如鼠标移动、鼠标按键的点击和释放等其函数原型如下所示 void mouse_event(DWORD dwFlags, DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo);其中dwFlags指定要模拟的鼠标事件类型和选项。可以是以下常量的组合 MOUSEEVENTF_ABSOLUTE指定鼠标位置是绝对坐标。如果不设置此标志则坐标是相对于当前鼠标位置的增量。MOUSEEVENTF_MOVE模拟鼠标移动事件。MOUSEEVENTF_LEFTDOWN模拟鼠标左键按下事件。MOUSEEVENTF_LEFTUP模拟鼠标左键释放事件。MOUSEEVENTF_RIGHTDOWN模拟鼠标右键按下事件。MOUSEEVENTF_RIGHTUP模拟鼠标右键释放事件。 其他常量可根据需要自行查阅相关文档。 dx鼠标事件发生时的横坐标绝对坐标或增量坐标根据 dwFlags 决定。dy鼠标事件发生时的纵坐标绝对坐标或增量坐标根据 dwFlags 决定。dwData鼠标事件的一些数据。对于滚轮事件它表示滚动的数量。对于其他事件通常设为 0。dwExtraInfo额外的信息。通常设为 0。 mouse_event 函数允许模拟鼠标事件通过设置 dwFlags 参数来指定需要模拟的事件类型设置 dx 和 dy 参数来指定事件发生时的鼠标位置。通过调用这个函数可以实现自动化鼠标操作如模拟鼠标点击、拖动等。 如下代码段实现了鼠标动作脚本的回放功能它从之前录制保存的脚本文件中读取鼠标动作信息并按照脚本中记录的顺序模拟鼠标动作实现鼠标动作的回放。 代码的主要功能如下 在 Play 函数中打开之前保存的脚本文件并使用 fgets 函数每次读取一行数据保存在 buf 字符数组中。使用 split 函数切割每行数据将每行数据切割成以逗号分隔的四个字符串并将这四个字符串转换为整数类型保存在 key_item 数组中。根据 key_item 数组中的数据判断是否需要进行鼠标点击动作并调用 mouse_event 函数模拟鼠标点击。调用 SetCursorPos 函数设置鼠标的位置并使用 Sleep 函数模拟鼠标移动的延时实现鼠标动作的回放。循环执行以上步骤直到脚本文件中的所有动作都被回放完毕。 // 回放脚本 void Play(char *script) {FILE* fp fopen(script, r);char buf[1024];while (feof(fp) 0){// 每次读入一行memset(buf, 0, 1024);fgets(buf, 1024, fp);// 以逗号切割char split_comma[4][32] { 0 };int comma_count split(split_comma, buf, ,);int key_item[4] { 0 };// std::cout 长度: comma_count std::endl;for (int x 0; x comma_count; x){// 继续切割冒号char split_colon[2][32] { 0 };split(split_colon, split_comma[x], :);// std::cout 字典键 split_colon[0] 字典值 split_colon[1] std::endl;key_item[x] atoi(split_colon[1]);}if (key_item[3] ! 0){mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);}if (key_item[4] ! 0){mouse_event(MOUSEEVENTF_RIGHTUP | MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);}// 得到数据后开始回放SetCursorPos(key_item[0], key_item[1]);Sleep(70);} }最后是主函数部分我们通过RegisterHotKey函数注册两个全局热键通过F1实现鼠标录制部分通过F2则实现鼠标回放最后通过GetMessage函数接收全局消息事件当出现WM_HOTKEY消息则依次判断是否启用录制回放等功能代码如下所示 int main(int argc, char* argv[]) {// 注册热键 F1 , F2if (0 RegisterHotKey(NULL, 1,0, VK_F1)){cout GetLastError() endl;}if (0 RegisterHotKey(NULL, 2,0, VK_F2)){cout GetLastError() endl;}if (0 RegisterHotKey(NULL, 3, 0, VK_F3)){cout GetLastError() endl;}// 消息循环MSG msg { 0 };while (GetMessage(msg, NULL, 0, 0)){switch (msg.message){case WM_HOTKEY:{if (1 msg.wParam){std::cout 录制脚本 std::endl;Recording((char *)d://script.txt);}else if (2 msg.wParam){std::cout 回放脚本 std::endl;Play((char *)d://script.txt);}else if (3 msg.wParam){exit(0);return 0;}break;}default:break;}}return 0; }读者可自行编译并运行这段代码通过录制一段鼠标功能并回放输出效果图如下所示 本文作者 王瑞 本文链接 https://www.lyshark.com/post/d3a88993.html 版权声明 本博客所有文章除特别声明外均采用 BY-NC-SA 许可协议。转载请注明出处
http://www.tj-hxxt.cn/news/141236.html

相关文章:

  • 郑州网站建设公司如何公众号开发专业
  • 建立一个网站的流程wordpress图片变小了
  • 怎么做页眉网络优化工程师是干什么的
  • 北京做网站推广多少钱网页制作背景颜色
  • 怎么自己做微网站吗网页设计html代码大全空格
  • 建站专业定制炫酷wordpress主题
  • 网站收录怎么删外贸网站建设价格怎么样
  • 万宁网站建设公司wordpress ping服务列表
  • html5自建网站小程序制作二维码
  • 南宁网站建设索王道下拉wordpress系列教程
  • 国内flask做的网站小程序商城代运营
  • 网站优化新闻kangle搭建wordpress
  • 网站访客代码js多站点cms
  • 网站免费做招生宣传语玉器珠宝做网站
  • 用瀑布流做的美食网站课程网站建设技术
  • 公司做的网站列入什么科目代理游戏
  • 在印度做视频网站阿里云建网站流程
  • 网站首页排名下降域名批量注册查询
  • 重庆网站建设夹夹虫公司.很好开发一款手机app软件需要多少钱
  • 移动终端网站建设新品发布会宣传文案
  • 东莞企业建站程序网站开发与管理心得体会
  • 网站制作台州黄岛建设厅官方网站
  • 网站建设运营执行方案河南网站建设推广运营
  • 网站建设报告书总结wordpress 主题翻译
  • 做微网站必须要有公众号吗软件商城免费下载app
  • 英德市网站建设ppt模板清新淡雅免费下载
  • 宾馆网站建设方案网站空间信息查询
  • 网站建设公司测评知名网站有哪些?
  • 大学生创业网站建设方案首尔面积
  • flash网站模板免费下载软件定制网