日期:2014-05-16  浏览次数:20729 次

linux eventx 模拟鼠标 单击和双击的方法

?

网上有很多模拟键盘和鼠标的例子,单单击和双击的很少

?

linux/input.h中有定义,这个文件还定义了标准按键的编码等

struct input_event {
??? struct timeval time;? //按键时间
??? __u16 type; //类型,在下面有定义
??? __u16 code; //要模拟成什么按键
??? __s32 value;//是按下还是释放
};

code:
事件的代码.如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.代码植0~127为键盘上的按键代码, 0x110~0x116 为鼠标上按键代码,其中0x110(BTN_ LEFT)为鼠标左键,0x111(BTN_RIGHT)为鼠标右键,0x112(BTN_ MIDDLE)为鼠标中键.其它代码含义请参看include/linux /input.h文件. 如果事件的类型代码是EV_REL,code值表示轨迹的类型.如指示鼠标的X轴方向 REL_X (代码为0x00),指示鼠标的Y轴方向REL_Y(代码为0x01),指示鼠标中轮子方向REL_WHEEL(代码为0x08).

type:
EV_KEY,键盘
EV_REL,相对坐标
EV_ABS,绝对坐标

value:
事件的值.如果事件的类型代码是EV_KEY,当按键按下时值为1,松开时值为0;如果事件的类型代码是EV_ REL,value的正数值和负数值分别代表两个不同方向的值.

?

? ? ? ? ? ?event.type = EV_KEY;

? ? ? ? ? ?event.code = BTN_LEFT;

? ? ? ? ? ?event.value = 1;

? ? ? ? ? ?write(fd, &event, sizeof(event));

如果?

type 设为键 ? code 设为左键 ? 按 俩下 ?再放开 ?不就是双击了吗 ?实了下 真的可行。

如下函数?simulate_mousedoubleclick 就可以双击双击左键了。

当然 ?按一下再放开 就是单击时间。


? ? ??

?

?

?

?

void simulate_mousedoubleclick(int fd)

{

? ? struct input_event event;

? ? ? ? memset(&event, 0, sizeof(event));

? ? ? ? gettimeofday(&