0

0

C++怎么操作鼠标键盘_C++自动化脚本教程【模拟】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-02-25 10:55:02

|

341人浏览过

|

来源于php中文网

原创

最可靠方式是windows用sendinput、linux用uinput、macos用cgevent;需注意权限、事件时序、坐标单位及平台特异性限制。

c++怎么操作鼠标键盘_c++自动化脚本教程【模拟】

Windows 下用 SendInput 模拟鼠标键盘最可靠

直接调 SendInput 是 Windows 平台唯一被系统级支持的模拟方式,比 keybd_eventmouse_event 更稳定,也比第三方库(如 AutoIt 绑定)更可控。它走的是底层输入队列,能绕过多数游戏反作弊对 PostMessage 的拦截。

常见错误是只填了 INPUT_KEYBOARD 类型却忘了设 wVkwScan —— 两者必须至少填一个,否则输入无效;模拟组合键(如 Ctrl+C)必须分三步:按 Ctrl → 按 C → 松 C → 松 Ctrl,漏掉任一帧都会失败。

  • SendInput 要求输入结构体数组连续内存,别用 vector 存再传 data(),最好栈上分配或 new[]
  • 模拟鼠标移动时,dx/dy 是相对坐标,单位是“微移”(1/16 像素),不是像素值,直接填 100 会飞出去
  • 需要管理员权限才能对全屏独占程序(如某些游戏)生效,但普通桌面程序不需要

Linux 下用 uinput 设备节点发事件

Linux 没有等效 SendInput 的 API,得自己创建虚拟设备节点。核心是打开 /dev/uinput,写入设备能力(比如 EV_KEYEV_REL),再通过 write()struct input_event

容易卡在权限问题:默认只有 root 能写 /dev/uinput。不要 chmod 777,正确做法是加 udev 规则,比如新建 /etc/udev/rules.d/99-uinput.rules,内容:KERNEL=="uinput", MODE="0660", GROUP="input",然后把用户加进 input 组。

立即学习C++免费学习笔记(深入)”;

AutoIt3 中文帮助文档打包
AutoIt3 中文帮助文档打包

AutoIt v3 版本, 这是一个使用类似 BASIC 脚本语言的免费软件, 它设计用于 Windows GUI(图形用户界面)中进行自动化操作. 利用模拟键盘按键, 鼠标移动和窗口/控件的组合来实现自动化任务. 而这是其它语言不可能做到或无可靠方法实现的(比如VBScript和SendKeys). AutoIt 非常小巧, 完全运行在所有windows操作系统上.(thesnow注:现在已经不再支持win 9x,微软连XP都能放弃, 何况一个win 9x支持), 并且不需要任何运行库. AutoIt

下载
  • 必须先调 ioctl(fd, UI_SET_EVBIT, EV_KEY) 等声明支持的事件类型,否则 write 会返回 -1
  • 键盘码用 Linux 的 KEY_A 这类宏(定义在 linux/input.h),不是 ASCII 或 Win32 的 VK_A
  • 模拟鼠标点击后不跟移动事件,光标不会自动跳,这是正常行为,不是 bug

macOS 上只能用 CGEventCreateMouseEvent 系列 API

macOS 完全禁止用户态进程注入输入事件,除非开启「辅助功能」权限。没授权时调 CGEventPost 直接静默失败,连错误码都不给。

授权不是一次性的:macOS 12+ 之后,每次应用重签名或更新 bundle ID,都要重新点系统设置里手动勾选。开发调试阶段建议用 csrutil disable 关掉 SIP(仅限测试机),否则连调试都卡住。

  • 鼠标坐标系是全局屏幕坐标(左上角 0,0),且 Y 轴向下增长,和 Quartz 坐标系一致
  • 键盘事件必须带 kCGKeyboardEventAutorepeat 标志控制是否允许长按重复,不设就只触发单次
  • 无法模拟触摸板手势(如三指滑动)、触控栏操作,这些 API 不开放

跨平台封装要注意事件时序和阻塞

不同系统对“按键按下→释放”的最小间隔容忍度不同。Windows SendInput 在 5ms 内连发两个 key down 可能被合并;macOS 要求两次 CGEventPost 至少间隔 10ms,否则后一次丢弃;Linux uinput 最宽松,但驱动层可能做去抖。

所有平台都不保证事件立即生效——特别是目标进程正在忙或挂起时。别在循环里狂发 SendInput 后立刻检查窗口状态,大概率读到旧画面。

  • 真实自动化中,必须加 std::this_thread::sleep_for(Windows/macOS 建议 ≥15ms,Linux ≥5ms)
  • 避免用 GetAsyncKeyStateXQueryKeymap 实时监听自己发的键,它们查的是物理设备状态,不是输入队列
  • 如果目标程序用了 DirectInput 或 Raw Input,模拟事件可能被完全忽略,这时候只能换方案(比如内存注入或 DLL 注入)

跨平台最难的不是发事件,而是判断“什么时候该发下一个”。坐标偏移、焦点丢失、渲染延迟,这些没法靠统一 API 解决,得结合具体场景做容错。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

智谱清言 - 免费全能的AI助手
智谱清言 - 免费全能的AI助手

智谱清言 - 免费全能的AI助手

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

365

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

200

2025.07.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

423

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

596

2023.08.10

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

195

2023.11.24

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

635

2023.10.24

a和A对应的ASCII码数值
a和A对应的ASCII码数值

a的ascii码是65,a的ascii码是97;ascii码表中,一个字母的大小写数值相差32,一般知道大写字母的ascii码数值,其对应的小写字母的ascii码数值就算出来了,是大写字母的ascii码数值“+32”。想了解更多相关的内容,可阅读本专题下面的相关文章。

2210

2024.10.24

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1256

2023.07.26

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

15

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.1万人学习

C 教程
C 教程

共75课时 | 4.9万人学习

C++教程
C++教程

共115课时 | 19.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号