?
网上有很多模拟键盘和鼠标的例子,单单击和双击的很少
?
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(&