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

C语言实现android/linux按键模拟

C语言实现 input事件模拟

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>int main() {int fd = open("/dev/input/event0", O_RDWR);if (fd < 0) {perror("Failed to open device");return -1;}// 定义 8 个输入事件(按顺序模拟按键按下和释放)struct input_event events[] = {// KEY_314 按下{.type = EV_KEY, .code = 314, .value = 1},{.type = EV_SYN, .code = SYN_REPORT, .value = 0},// KEY_212 按下{.type = EV_KEY, .code = 212, .value = 1},{.type = EV_SYN, .code = SYN_REPORT, .value = 0},// KEY_212 释放{.type = EV_KEY, .code = 212, .value = 0},{.type = EV_SYN, .code = SYN_REPORT, .value = 0},// KEY_314 释放{.type = EV_KEY, .code = 314, .value = 0},{.type = EV_SYN, .code = SYN_REPORT, .value = 0}};// 批量发送事件for (int i = 0; i < sizeof(events)/sizeof(events[0]); i++) {if (write(fd, &events[i], sizeof(struct input_event)) < 0) {perror("Failed to send event");close(fd);return -1;}}close(fd);return 0;
}

静态交叉编译

aarch64-linux-gnu-gcc-10   123.c -o startup_camera_common --static

可以模拟 简单按键事件

为什么不用 shell命令

比如
adb shell “sendevent /dev/input/event0 0001 314 00000001”
adb shell “sendevent /dev/input/event0 0000 0000 00000000”
adb shell “sendevent /dev/input/event0 0001 212 00000001”
adb shell “sendevent /dev/input/event0 0000 0000 00000000”

adb shell “sendevent /dev/input/event0 0001 212 00000000”
adb shell “sendevent /dev/input/event0 0000 0000 00000000”
adb shell “sendevent /dev/input/event0 0001 314 00000000”
adb shell “sendevent /dev/input/event0 0000 0000 00000000”

sendevent 是 busybox命令, 每次执行八条命令 耗时过长, 在抓 perfetto的时候 会看到耗时特别久, 对于分析按键触发的性能事件有很大的干扰!

http://www.xdnf.cn/news/531253.html

相关文章:

  • 纸上流年:Linux基础IO的文件理解与操作
  • 本地部署dify+ragflow+deepseek ,结合小模型实现故障预测,并结合本地知识库和大模型给出维修建议
  • Node.js聊天室开发:从零到上线的完整指南
  • Httphelper: Http请求webapi小记
  • 达梦数据库对json字段进行操作
  • 【Git】分支管理
  • Go语言八股文之Mysql优化
  • 【Golang笔记02】函数、方法、泛型、接口学习笔记
  • AI在网络安全中的应用之钓鱼邮件检测
  • 网络安全-等级保护(等保) 2-7 GB/T 25058—2019 《信息安全技术 网络安全等级保护实施指南》-2019-08-30发布【现行】
  • Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)
  • OSCP备战-pwnlab_init靶机详细步骤
  • 办公效率提升:一键合并多个Word文档的解决方案
  • 【聚类】K-means++
  • Spring Cloud初探之spring cloud gateway实现转发、鉴权及负载均衡(六)
  • spring中yml配置上下文与tomcat等外部容器不一致问题
  • Yocto和Buildroot功能和区别
  • 数据库连接池技术与 Druid 连接工具类实现
  • w~自动驾驶合集1
  • 腾讯云Mysql实现远程链接
  • idea2024 不知道安装了什么插件,界面都是中文的了,不习惯,怎么修改各个选项改回英文
  • 文件字节流
  • LLM笔记(九)KV缓存(2)
  • RK3568解码1080P视频时遇到系统崩溃内核挂掉的解决方案
  • C语言:在操作系统中,链表有什么应用?
  • 安全强化的Linux
  • RLᵛ_ Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers
  • 【TTS回顾】Bert-VITS2深度解析:融合BERT的多语言语音合成模型
  • 详细总结和讲解redis的基本命令
  • JavaScript 性能优化实战指南