名词解释:

scancode: 驱动对硬件的标记

keycode: 上层应用程序所见的标记,跟硬件的标记不同, 一般为KEY_F1之类的宏

一般驱动将scancode绑定到keycode

对未绑定的scancode, 可以通过setkeycodes将将其绑定到未使用的keycode

注: 有些按键会被解释成acpi event, 可以通过acpi_listen来监听,但不一定成功,目前还没具体了解

模 拟按键是上层应用程序的行为, 所以不需要编译成模块,只需要想平常的应用程序那样编译就可以了, 不过它要包含这个文件, 同时要明确键盘对应的/dev/input/event[0-4]到底是哪个文件, 此外还需要以root权限来运行

赖半仙注解:

运行命令 cat /proc/bus/input/devices  在输出里面查找 xxx keyboard 对应的文件是/dev/input/event几。我开始想当然的以为键盘文件是event1,结果死人都调不出来,弄了很久最后从event0开始一个一个试,才发现我的手提电脑键盘文件对应的是event4。

在我的电脑上运行命令 ls /dev/input/event* 发现有好多输入设备…………

/dev/input/event0  /dev/input/event10  /dev/input/event2  /dev/input/event4  /dev/input/event6  /dev/input/event8

/dev/input/event1  /dev/input/event11  /dev/input/event3  /dev/input/event5  /dev/input/event7  /dev/input/event9

下面是 cat /proc/bus/input/devices 命令对应键盘文件的一段输出

I: Bus=0011 Vendor=0001 Product=0001 Version=ab41

N: Name="AT Translated Set 2 keyboard"

P: Phys=isa0060/serio0/input0

S: Sysfs=/devices/platform/i8042/serio0/input/input4

U: Uniq=

H: Handlers=kbd event4

B: EV=120013

B: KEY=8000 0 0 0 0 0 5007 2002000 380307c f800d001 feffffdf ffefffff ffffffff ffffffff

B: MSC=10

B: LED=7

下面的程序是模拟按键NumLock,就是控制小键盘灯的那个按键,按下去(运行程序没有问题)后小键盘灯就会点亮或者熄灭。

#include

#include

#include

#include

#include

#include

void simulate_key(int fd, unsigned int keycode, int keyvalue)

{

struct input_event event;

event.type = EV_KEY;

event.code = keycode;

event.value = keyvalue;

gettimeofday(&event.time, 0);

if (write(fd, &event, sizeof(event)) < 0) {

printf("simulate key error/n");

return;

}else

printf("simuate key %d, %d/n", keycode, keyvalue);

}

int

main ( int argc, char *argv[] )

{

char *path = "/dev/input/event1";

unsigned int key_code = KEY_NUMLOCK;

if (argc >= 3) {

path = argv[1];

key_code = atoi(argv[2]);

}else if (argc >= 2)

path = argv[1];

int fd_kbd = open(path, O_RDWR);

if(fd_kbd <= 0) {

printf("error open keyboard:%s/n", strerror(errno));

return -1;

}

simulate_key(fd_kbd, key_code, 1);

simulate_key(fd_kbd, key_code, 0);

close(fd_kbd);

return 0;

} /* ---------- end of function main ---------- */

触发单击屏幕事件

public void myClickEvent(float x, float y) {

long firstTime = SystemClock.uptimeMillis();

final MotionEvent firstEvent = MotionEvent.obtain(firstTime, firstTime,

MotionEvent.ACTION_DOWN, x, y, 0);

long secondTime = firstTime + 30;

final MotionEvent secondEvent = MotionEvent.obtain(secondTime,

secondTime, MotionEvent.ACTION_UP, x, y, 0);

dispatchTouchEvent(firstEvent);

dispatchTouchEvent(secondEvent);

}

public void myClickEvent(float x, float y) {

long firstTime = SystemClock.uptimeMillis();

final MotionEvent firstEvent = MotionEvent.obtain(firstTime, firstTime,

MotionEvent.ACTION_DOWN, x, y, 0);

long secondTime = firstTime + 30;

final MotionEvent secondEvent = MotionEvent.obtain(secondTime,

secondTime, MotionEvent.ACTION_UP, x, y, 0);

dispatchTouchEvent(firstEvent);

dispatchTouchEvent(secondEvent);

}

sendevent /dev/input/event0  [TYPE] [CODE] [VALUE]

onTouchEvent

KEYCODE_UNKNOWN=0; KEYCODE_SOFT_LEFT=1; KEYCODE_SOFT_RIGHT=2; KEYCODE_HOME=3; KEYCODE_BACK=4; KEYCODE_CALL=5; KEYCODE_ENDCALL=6; KEYCODE_0=7; KEYCODE_1=8; KEYCODE_2=9; KEYCODE_3=10; KEYCODE_4=11; KEYCODE_5=12; KEYCODE_6=13; KEYCODE_7=14; KEYCODE_8=15; KEYCODE_9=16; KEYCODE_STAR=17; KEYCODE_POUND=18; KEYCODE_DPAD_UP=19; KEYCODE_DPAD_DOWN=20; KEYCODE_DPAD_LEFT=21; KEYCODE_DPAD_RIGHT=22; KEYCODE_DPAD_CENTER=23; KEYCODE_VOLUME_UP=24; KEYCODE_VOLUME_DOWN=25; KEYCODE_POWER=26; KEYCODE_CAMERA=27; KEYCODE_CLEAR=28; KEYCODE_A=29; KEYCODE_B=30; KEYCODE_C=31; KEYCODE_D=32; KEYCODE_E=33; KEYCODE_F=34; KEYCODE_G=35; KEYCODE_H=36; KEYCODE_I=37; KEYCODE_J=38; KEYCODE_K=39; KEYCODE_L=40; KEYCODE_M=41; KEYCODE_N=42; KEYCODE_O=43; KEYCODE_P=44; KEYCODE_Q=45; KEYCODE_R=46; KEYCODE_S=47; KEYCODE_T=48; KEYCODE_U=49; KEYCODE_V=50; KEYCODE_W=51; KEYCODE_X=52; KEYCODE_Y=53; KEYCODE_Z=54; KEYCODE_COMMA=55; KEYCODE_PERIOD=56; KEYCODE_ALT_LEFT=57; KEYCODE_ALT_RIGHT=58; KEYCODE_SHIFT_LEFT=59; KEYCODE_SHIFT_RIGHT=60; KEYCODE_TAB=61; KEYCODE_SPACE=62; KEYCODE_SYM=63; KEYCODE_EXPLORER=64; KEYCODE_ENVELOPE=65; KEYCODE_ENTER=66; KEYCODE_DEL=67; KEYCODE_GRAVE=68; KEYCODE_MINUS=69; KEYCODE_EQUALS=70; KEYCODE_LEFT_BRACKET=71; KEYCODE_RIGHT_BRACKET=72; KEYCODE_BACKSLASH=73; KEYCODE_SEMICOLON=74; KEYCODE_APOSTROPHE=75; KEYCODE_SLASH=76; KEYCODE_AT=77; KEYCODE_NUM=78; KEYCODE_HEADSETHOOK=79; KEYCODE_FOCUS=80;//*Camera*focus KEYCODE_PLUS=81; KEYCODE_MENU=82; KEYCODE_NOTIFICATION=83; KEYCODE_SEARCH=84; KEYCODE_MEDIA_PLAY_PAUSE=85; KEYCODE_MEDIA_STOP=86; KEYCODE_MEDIA_NEXT=87; KEYCODE_MEDIA_PREVIOUS=88; KEYCODE_MEDIA_REWIND=89; KEYCODE_MEDIA_FAST_FORWARD=90; KEYCODE_MUTE=91;

android模拟全局按键,Android 模拟按键汇总相关推荐

  1. android app全局字体,Android app全局字体设置

    相信很多对设计追求极致的开发者们对Android系统的默认字体都会感到不满意,这个时候需要使用自定义的字体,当然可以使用系统提供的Typeface来加载自定义字体,但是,一个个TextView的设置, ...

  2. adb 模拟按键,调试按键,android测试可以用

    我们在用adb 调试app时,如果需要模拟按键怎样做呢 (http://blog.csdn.net/sergeycao),可以使用如下的方法 adb shell input keyevent 4 #这 ...

  3. android模拟power键,android 发送模拟按键

    1. 权限 需要在manifest 里面增加android:sharedUserId="android.uid.system" 加上权限 ... android:sharedUse ...

  4. Android 模拟按键,模拟触摸点击,模拟滑动

    (1)模拟按键发送事件 1.1 在dispatchKeyvent中直接替换按键Code @Override     public boolean dispatchKeyEvent(KeyEvent e ...

  5. android 模拟电脑按键精灵,模拟精灵_安卓模拟精灵_和按键精灵一样的软件

    多普鼠标键盘万能模拟精灵程序以指定窗口为操作目标,定位更准确.更快捷,并且不需要编写任何代码,只要会电脑操作的人就可以快速的生成强大的后台操作代码,可以完成任何一个前台用户可以完成的工作,可以应用到任 ...

  6. 怎么看android底层源码,Android 底层按键获取

    与用户交互的输入设备(触摸屏,键盘等)是获取用户意图的来源.由于硬件本身的物理特性及由各大硬件厂商的标准不一,这将导致我们从设备上获取到的键值存在一定的差异性,为了让系统能够正确处理用户的操作,我们就 ...

  7. 模拟手指触摸 Android,TouchLib

    TouchLib Android模拟触摸屏幕库(Android simulates a touch screen) 描述 在Root情况下也许你有模拟触摸屏幕的需求,如按键精灵那样的功能. 如何使用 ...

  8. Android基于Socket无线遥控 - 模拟触摸按键篇framework jar

    Android基于Socket无线遥控(一)-Socket基本模型搭建 http://233.io/article/1017992.html 本篇主要内容涉及模拟系统按键消息,单击事件,触屏事件等,模 ...

  9. android 辅助功能 模拟点击,Android模拟点击的四种方式

    导论 在Android中模拟一个点击事件有三种方式是通过模拟MotionEvent来实现:一种是通过ADB来实现:一种是通过Instrumentation测试框架来实现 第一种:模拟MotionEve ...

  10. android+usb模拟点击,Android后台模拟点击探索(附源码)

    工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击. 经过一番探索,一共整理出两种不同的方案:AccessibilityServi ...

最新文章

  1. c#将http调用返回额json中的有关中文的unicode转换为中文
  2. 一次恐怖的 Java 内存泄漏排查实战
  3. 【渝粤教育】国家开放大学2018年秋季 1167t环境水利学 参考试题
  4. 递归算法思路以及题目总结(未完待续...)
  5. XML DOM 节点类型(Node Types)
  6. BZOJ5329:[SDOI2018]战略游戏(圆方树,虚树)
  7. a1277以太网适配器驱动_福禄克DSX系列工业以太网连接器集锦
  8. Ribbon界面开发:如何创建Ribbon样式的应用程序框架
  9. 计算机控制技术实验平台,THBDC-1控制理论计算机控制技术实验平台简介.doc
  10. 深入理解Java枚举类型(enum)
  11. 【计算几何】求三角形外接圆的周长、面积公式
  12. 同步多个 git 远程仓库
  13. 案例效果:实现移动端端轮播图效果
  14. char* char[] char** char*[] char[][]详解
  15. 零基础学习PS——Photoshop的167个技能
  16. 51单片机 简易秒表计时器(100秒) 小数点后四位
  17. 在编译humanoid_navigation相关软件包,出现 Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:解决方案
  18. 居上无宦乐,达人不折腰
  19. mysql命令去重_mysql去重
  20. 精通正则表达式读书笔记

热门文章

  1. setoolkit简易社会工程学攻击
  2. mysql数据库索引案例_MySQL 数据库案例优化分享-爱可生
  3. pandas用众数填充缺失值_缺而不失——pandas中常见缺失值处理方法
  4. JS--JavaScript提交表单(submit事件)、重置表单、取消默认提交表单(单击按钮、回车)
  5. redmine mysql 配置_Redmine 2.0.3 安装配置
  6. 繁体字非主流伤感日志_親愛的,為什麼
  7. matlab2012添加工具箱,关于matlab添加工具箱的命令
  8. php 修改json数组的值,php如何修改json数据
  9. Android drawable快速实现竖向ProgressBar
  10. vue实现竖向跑马灯