Android下模拟按键输入
2013-06-03 10:33
190 查看
android内集成了sendevent和getevent命令,sendevent命令源码如下,我们通过sendevent命令直接模拟出一个android按键.
通过上面观察,我们注意到一个结构体struct input_event,关于这个结构体的介绍请参考内核源码中的include/linux/input.h文件,我们只需要填充这个结构体,然后将这个结构体写入到对应的输入设备节点中即可,下面模拟一下home按键,为了捕获一下Home按键的键码我们用getevent命令进行监听,然后按下一次home键,记录键码,然后用sendevent模拟一次,步骤如下:
#getevent //执行该命令然后按下home得到如下内容:
/dev/input/event0: 0001 0066 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0066 00000000
/dev/input/event0: 0000 0000 00000000
上述每一行的意思依次是:home按键的输入设备节点 事件类型(1表示按键事件0表示同步事件) 键码(0x66是Home键码) 状态(1表示按下0表示抬起)
下面我们模拟一次按键:
#sendevent 1 102 1
#sendevent 0 0 0
#sendevent 1 102 0
#sendevent 0 0 0
是不是看见效果了,关于更多键码你也可以参考android源码下的external/qemu/android/keycode.h和external/qemu/linux_keycodes.h文件。
int sendevent_main(int argc, char *argv[]) { int i; int fd; int ret; int version; struct input_event event; if(argc != 5) { fprintf(stderr, "use: %s device type code value\n", argv[0]); return 1; } //打开输入事件的节点 fd = open(argv[1], O_RDWR); if(fd < 0) { fprintf(stderr, "could not open %s, %s\n", argv[optind], strerror(errno)); return 1; } if (ioctl(fd, EVIOCGVERSION, &version)) { fprintf(stderr, "could not get driver version for %s, %s\n", argv[optind], strerror(errno)); return 1; } memset(&event, 0, sizeof(event)); //填充结构体,参数分别是 事件类型 键码 值 event.type = atoi(argv[2]); event.code = atoi(argv[3]); event.value = atoi(argv[4]); //将事件写入fd中,即可模拟按键 ret = write(fd, &event, sizeof(event)); if(ret < sizeof(event)) { fprintf(stderr, "write event failed, %s\n", strerror(errno)); return -1; } }
通过上面观察,我们注意到一个结构体struct input_event,关于这个结构体的介绍请参考内核源码中的include/linux/input.h文件,我们只需要填充这个结构体,然后将这个结构体写入到对应的输入设备节点中即可,下面模拟一下home按键,为了捕获一下Home按键的键码我们用getevent命令进行监听,然后按下一次home键,记录键码,然后用sendevent模拟一次,步骤如下:
#getevent //执行该命令然后按下home得到如下内容:
/dev/input/event0: 0001 0066 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0066 00000000
/dev/input/event0: 0000 0000 00000000
上述每一行的意思依次是:home按键的输入设备节点 事件类型(1表示按键事件0表示同步事件) 键码(0x66是Home键码) 状态(1表示按下0表示抬起)
下面我们模拟一次按键:
#sendevent 1 102 1
#sendevent 0 0 0
#sendevent 1 102 0
#sendevent 0 0 0
是不是看见效果了,关于更多键码你也可以参考android源码下的external/qemu/android/keycode.h和external/qemu/linux_keycodes.h文件。
相关文章推荐
- android adb 模拟点击、滑动、输入、按键
- Android 按键模拟输入事件和Monitor工具的使用
- android系列:第三篇android调试常用工具:模拟按键输入,修改分辨率,获得按键消息
- Android及Robotium学习总结【环境变量,真机调试及根据id模拟按键】
- Android模拟按键点击,实现。。
- driver: linux下如何模拟按键输入和模拟鼠标
- [Android][adb]input笔记--模拟-按键-点击-滑动事件
- Android应用程序模拟手机按键
- Android模拟按键
- android跨进程事件注入(程序模拟用户输入)
- android模拟按键
- 【Android】代码实现模拟屏幕点击和键盘按键事件
- android_模拟按键资料
- 模拟键盘按键 自动输入文字 (转载)
- android模拟电源按键
- android 模拟按键
- android模拟购物app输入支付密码
- driver: linux下如何模拟按键输入和模拟鼠标
- android模拟按键问题总结[使用IWindowManager.injectKeyEvent方法](转)
- android service中进行模拟按键的限制条件