【Android源码 栏目提醒】:网学会员为广大网友收集整理了,关于捕获android系统鼠标轨迹和键盘key值 - 其它资料,希望对大家有所帮助!
-------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------- 目录一、找出设备中,我用的是什么 event? .............................................................................2二、对 input_event 数据结构的解释......................................................................................3 1、code: .........................................................................................................................4 2、type:.............................................................................................................................4 3、value: ........................................................................................................................5三、抓取 event 值的原理: ....................................................................................................5 1、打开 event 设备 ..........................................................................................................5 2、read 设备....................................................................................................................5 3、判断是什么事件.........................................................................................................6 4、保存您想要的键盘值, (相对/绝对)x,y 的值。
................................................6 5、键盘映射.....................................................................................................................6四、如何在
Android 系统上使用程序,并抓到我们需要的值?........................................6五、附录 key 转换表..............................................................................................................7一、找出设备中,我用的是什么 event? 关于该设备打开的是哪个 event, 我们可以通过命令, /proc/bus/input/devices 来查看, cat执行这个命令后,你会看到您的设备上有多少 eventX。
rootlenovo-desktop: cat /proc/bus/input/devices I: Bus0019 Vendor0000 Product0001 Version0000 N: NamePower Button P: PhysPNP0C0C/button/input0 S: Sysfs/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0C:00/input/input0 U: Uniq H: Handlerskbd event0 B: EV3 B: KEY100000 0 0 0 I: Bus0019 Vendor0000 Product0001 Version0000 N: NamePower Button P: PhysLNXPWRBN/button/input0 S: Sysfs/devices/LNXSYSTM:00/LNXPWRBN:00/input/input1 U: Uniq H: Handlerskbd event1 B: EV3 B: KEY100000 0 0 0 I: Bus0017 Vendor0001 Product0001 Version0100 N: NameMacintosh mouse button emulation P: Phys S: Sysfs/devices/virtual/input/input2 U: Uniq H: Handlersmouse0 event2 B: EV7 B: KEY70000 0 0 0 0 0 0 0 0 B: REL3 I: Bus0011 Vendor0001 Product0001 Versionab41 N: NameAT Translated Set 2 keyboard P: Physisa0060/serio0/input0 S: Sysfs/devices/platform/i8042/serio0/input/input3 U: Uniq H: Handlerskbd event3 B: EV120013 B: KEY4 2000000 3803078 f800d001 feffffdf ffefffff ffffffff fffffffe B: MSC10 B: LED7 I: Bus0003 Vendor17ef Product600e Version0111 N: NameLenovo Optical Mouse P: Physusb-0000:00:1d.1-1/input0 S: Sysfs/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/input/input4 U: Uniq H: Handlersmouse1 event4 B: EV17 B: KEY70000 0 0 0 0 0 0 0 0 B: REL103 B: MSC10 ….. ….. 我的 ubunte 系统上敲完这个命令后,能够看到 event0—event7共 8 个设备。
如上面红色标记,可以很快找出该设备对应的输入设备,以及对应的 eventX,跨入眼前视野的“Lenovo Optical Mouse” 这肯定是我鼠标啊,用的牌子就是这个 Lenovo,背面上写着呢。
二、对 input_event 数据结构的解释 标准按键的编码的定义在 linux/input.h 中 struct input_event struct timeval time //按键时间 __u16 type //类型,在下面有定义 __u16 code //要模拟成什么按键 __s32 value//是按下还是释放 1、code: 事件的代码.如果事件的类型代码是 EV_KEY该代码 code 为设备键盘代码. 代码植 0127 为键盘上的按键代码 0x1100x116 为鼠标上按键代码 其中 0x110BTN_ LEFT为鼠标左键 0x111BTN_RIGHT为鼠标右键 0x112BTN_ MIDDLE为鼠标中键. 如果事件的类型代码是 EV_RELcode 值表示轨迹的类型.如指示鼠标的 X 轴方向REL_X代码为 0x00指示鼠标的 Y 轴方向 REL_Y代码 为 0x01指示鼠标中轮子方向REL_WHEEL代码为 0x08.其它代码含义请参看 include/linux/input.h 文件.2、type: EV_KEY键盘 EV_REL相对坐标(轨迹球) EV_ABS绝对坐标(鼠标) 。
。
。
/ Event types 参考值 / define EV_SYN 0x00 define EV_KEY 0x01 //按键 define EV_REL 0x02 //相对坐标轨迹球 define EV_ABS 0x03 //绝对坐标(鼠标) define EV_MSC 0x04 //其他 define EV_SW 0x05 define EV_LED 0x11 //LED define EV_SND 0x12//声音 define EV_REP 0x14//repeat define EV_FF 0x15 define EV_PWR 0x16 define EV_FF_STATUS 0x17 define EV_MAX 0x1f define EV_CNT EV_MAX13、value: 事件的值.如果事件的类型代码是 EV_KEY,当按键按下时值为 1松开时值为 0 如果事件的类型代码是 EV_ RELvalue 的正数值和负数值分别代表两个不同方向的值.三、抓取 event 值的原理:对 eventX 进行 read/write 来抓取 event 的各种信息;1、打开 event 设备 event0_fd open“/dev/input/event0” O_RDWR2、read 设备 rd readevent0_fd event0 sizeofstruct input_event 643、判断是什么事件 如果eventi.type 3 eventi.code 0,为鼠标位置的 x 坐标值; eventi.type 3 eventi.code 1,为鼠标位置的 y 坐标值; 如果eventi.type 1 eventi.value 1,为按下 key; eventi.type 1 eventi.value 0,为松开 key; 如果,eventi.type 其它事件如轨迹球...声音控制...具体见
源码。
4、保存您想要的键盘值,(相对/绝对)x,y 的值。
5、键盘映射 由于
Android 输入处理经过那两次映射; 1、事件码input.h 定义的键盘值------------------------------------字符串; 2、字符串---------------
Android 中 java 的 UI 程序中自定义的键盘 key; 由于有键盘映射关系,而我们想要的值是
Android 中 java 的 Ui 自定义值;为此我在代 码中自定义了一个数组,用来进行事件码和 java 的 UI 程序中自定义的键盘 key 进行转 换。
四、如何在
Android 系统上使用程序,并抓到我们需要的值? 1、直接将编译好的 arm 二进制文件,使用 adb push 命令直接 push 到虚拟机或者真实的设备上面,push 完后,保存在/data/目录下 2、进入/data/目录,直接执行。
假如工具名字叫:capture , 则用./capture 3、使用 crtlc 终止程序或者 kill -2 capture 运行的进程号。
注:只有采用以上两种方法终止程序后,才能将我们需要保存的值,保存到/data/template.monkey 文件中,否则只是个空文件 4、如果没有二进制的 arm 执行文件,那么则需要我们自己编译,怎么编译,这里就不讲了五、附录 key 转换表key Event keycode
Android keycodeKEYCODE_1 2 8KEYCODE_2 3 9KEYCODE_3 4 10KEYCODE_4 5 11KEYCODE_5 6 12KEYCODE_6 7 13KEYCODE_7 8 14KEYCODE_8 9 15KEYCODE_9 10 16KEYCODE_0 11 7KEYCODE_Q 16 45KEYCODE_W 17 51KEYCODE_E 18 33KEYCODE_R 19 46KEYCODE_T 20 48KEYCODE_Y 21 53KEYCODE_U 22 49KEYCODE_I 23 37KEYCODE_O 24 43KEYCODE_P 25 44KEYCODE_A 30 29KEYCODE_S 31 47KEYCODE_D 32 32KEYCODE_F 33 34KEYCODE_G 34 35KEYCODE_H 35 36KEYCODE_J 36 38KEYCODE_K 37 39KEYCODE_L 38 40KEYCODE_DEL 14 67KEYCODE_SHIFT_LEFT 42 59KEYCODE_Z 44 54KEYCODE_X 45 52KEYCODE_C 46 31KEYCODE_V 47 50KEYCODE_B 48 30KEYCODE_N 49 42KEYCODE_M 50 41KEYCODE_. 52 56KEYCODE_ENTER 28 66KEYCODE_ALT_LEFT 56 57KEYCODE_SYM 127 63KEYCODE_ 215 77KEYCODE_SPACE 57 62KEYCODE_/ 53 73KEYCODE_ 51 55KEYCODE_ALT_RIGHT 100 58KEYCODE_CAMERA 27KEYCODE_VOLUME_DOWN 114 25KEYCODE_VOLUME_UP 115 24KEYCODE_STAR 116 17KEYCODE_CALL 231 5KEYCODE_ENDCALL 107 6KEYCODE_HOME 102 3KEYCODE_MENU 229 82KEYCODE_BACK 158 4KEYCODE_POWER 217 26KEYCODE_DPAD_UP 103 19KEYCODE_DPAD_DOWN 108 20KEYCODE_DPAD_LEFT 105 21KEYCODE_DPAD_RIGHT 106 22KEYCODE_DPAD_CENTER 232 23KEYCODE_SOFT_LEFT 1KEYCODE_SOFT_RIGHT 2KEYCODE_POUND 18KEYCODE_CLEAR 28KEYCODE_SHIFT_RIGHT 60KEYCODE_TAB 61KEYCODE_EXPLORER 64KEYCODE_ENVELOPE 65KEYCODE_ GRAVE 68KEYCODE_ MINUS 69KEYCODE_ EQUALS 70KEYCODE_LEFT_BRACKET 71KEYCODE_RIGHT_BRACKET 72KEYCODE_SEMICOLON 74KEYCODE_APOSTROPHE 75KEYCODE_SLASH 76KEYCODE_NUM 78KEYCODE_HEADSETHOOK 79KEYCODE_PLUS 81KEYCODE_NOTIFICATION 83KEYCODE_SEARCH 84KEYCODE_MEDIA_PLAY_PAUSE 85KEYCODE_MEDIA_STOP 86KEYCODE_MEDIA_NEXT 87KEYCODE_MEDIA_PREVIOUS 88KEYCODE_MEDIA_REWIND 89KEYCODE_MEDIA_FAST_FORWARD 90KEYCODE_MUTE 91KEYCODE_FOCUS 80KEYCODE_UNKNOWN 0KEYCODE_PAGE_UP 92KEYCODE_PAGE_DOWN 93KEYCODE_PICTSYMBOLS 94KEYCODE_SWITCH_CHARSET 95
上一篇:
Android系统进程Zygote启动过程的源代码分析
下一篇:
百公里油耗仅6.45L,哈弗F7智能节油赛燃“擎”登陆石家庄