/************************************************************************
* Linux 模拟 鼠标 键盘 事件
* 说明:
* 以前看到有些软件能够控制鼠标移动,键盘操作等功能,总想知道这些到底
* 是怎么做到的,好像是2年前也尝试去做这件事,但那时候对知识的匮乏直接导致
* 无法进行,早上突然想到这件事,于是又搜索了一下,鉴于目前经常接触Linux
* 驱动,对这些东西的理解也就很容易。
*
* 2016-2-27 深圳 南山平山村 曾剑锋
***********************************************************************/ 一、参考文章:
1. 交互系统的构建之(二)Linux下鼠标和键盘的模拟控制
http://blog.csdn.net/zouxy09/article/details/7920253
2. 在Linux中模拟击键和鼠标移动
http://os.51cto.com/art/201409/450283.htm 二、cat /proc/bus/input/devices:
......
I: Bus= Vendor= Product= Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input1
U: Uniq=
H: Handlers=sysrq kbd event1 ---> keyboard
B: PROP=
B: EV=
B: KEY= 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=
B: LED=
......
I: Bus= Vendor=0e0f Product= Version=
N: Name="VMware VMware Virtual USB Mouse"
P: Phys=usb-::00.0-/input1
S: Sysfs=/devices/pci0000:/::11.0/::00.0/usb2/-/-:1.1/input/input3
U: Uniq=
H: Handlers=mouse1 event3 ---> mouse
B: PROP=
B: EV=
B: KEY=ffff0000
B: REL=
B: MSC=
...... 三、权限修改:
myzr@myzr:/dev/input$ ls -al
total
drwxr-xr-x root root Feb : .
drwxr-xr-x root root Feb : ..
drwxr-xr-x root root Feb : by-id
drwxr-xr-x root root Feb : by-path
crw-r----- root root , Feb : event0
crw-r----- root root , Feb : event1
crw-r----- root root , Feb : event2
crw-r----- root root , Feb : event3
crw-r----- root root , Feb : event4
crw-r--r-- root root , Feb : js0
crw-r----- root root , Feb : mice
crw-r----- root root , Feb : mouse0
crw-r----- root root , Feb : mouse1
crw-r----- root root , Feb : mouse2
myzr@myzr:/dev/input$ sudo chmod * 四、example code:
#include <stdio.h>
#include <linux/input.h>
#include <fcntl.h>
#include <sys/time.h>
#include <unistd.h>
#include <string.h> //按键模拟,按键包含按下和松开两个环节
void simulate_key(int fd, int kval)
{
struct input_event event;
gettimeofday(&event.time, ); //按下kval键
event.type = EV_KEY;
event.value = ;
event.code = kval;
write(fd, &event, sizeof(event)); //同步,也就是把它报告给系统
event.type = EV_SYN;
event.value = ;
event.code = SYN_REPORT;
write(fd, &event, sizeof(event)); memset(&event, , sizeof(event));
gettimeofday(&event.time, ); //松开kval键
event.type = EV_KEY;
event.value = ;
event.code = kval;
write(fd, &event, sizeof(event)); //同步,也就是把它报告给系统
event.type = EV_SYN;
event.value = ;
event.code = SYN_REPORT;
write(fd, &event, sizeof(event));
} //鼠标移动模拟
void simulate_mouse(int fd, int rel_x, int rel_y)
{
struct input_event event;
gettimeofday(&event.time, ); //x轴坐标的相对位移
event.type = EV_REL;
event.value = rel_x;
event.code = REL_X;
write(fd, &event, sizeof(event)); //y轴坐标的相对位移
event.type = EV_REL;
event.value = rel_y;
event.code = REL_Y;
write(fd, &event, sizeof(event)); //同步
event.type = EV_SYN;
event.value = ;
event.code = SYN_REPORT;
write(fd, &event, sizeof(event));
} int main(int argc, char **argv)
{
int fd_mouse = -;
int fd_kbd = -;
int i = ; // 请保证该设备节点有写的权限
fd_kbd = open("/dev/input/event1", O_RDWR);
if(fd_kbd <= ) {
printf("Can not open keyboard input file\n");
return -;
} // 请保证该设备节点有写的权限
fd_mouse = open("/dev/input/event3", O_RDWR);
if(fd_mouse <= ) {
printf("Can not open mouse input file\n");
return -;
} for (i = ; i < ; i++) {
//simulate_key(fd_mouse, BTN_LEFT); //模拟按下鼠标左键
//simulate_key(fd_mouse, BTN_RIGHT); //模拟按下鼠标左键
if (i % == )
simulate_key(fd_kbd, KEY_A); //模拟按下键盘A键
//模拟鼠标相对上次x和y轴相应移动10个像素
//simulate_mouse(fd_mouse, 20, 20);
sleep();
} close(fd_kbd);
close(fd_mouse);
}

Linux 模拟 鼠标 键盘 事件的更多相关文章

  1. 由chrome剪贴板问题研究到了js模拟鼠标键盘事件

    写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.cli ...

  2. 使用python监听、模拟鼠标键盘事件

    最近守望职业选手疑似开挂事件挺热闹的,在下小菜一枚,并不能从视频中看出端倪.看了一些关于外挂的讨论,自动点射和压枪只需在鼠标驱动上做些改动即可,自瞄或其他高级功能则需要读内存或修改游戏文件,检测也更容 ...

  3. Python - selenium_WebDriver 鼠标键盘事件

    from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...

  4. Delphi下利用WinIo模拟鼠标键盘详解 有参考价值

    https://blog.csdn.net/fgrass_163/article/details/6365296 Delphi下利用WinIo模拟鼠标键盘详解 2011年04月26日 21:03:00 ...

  5. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  6. C#模拟鼠标键盘控制其他窗口(一)

    编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的执行,开发 ...

  7. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  8. 将CodedUI Test 放到控制台程序中,模拟鼠标键盘操作

    CodedUI Test是微软的自动化测试工具,在VS中非常好用.可以用来模拟鼠标点击,键盘输入.但执行的时候必须要用mstest调用,无法传入参数(当然可以写入config文件中,但每次修改十分麻烦 ...

  9. Tkinter 鼠标键盘事件(一)

    一: 鼠标事件 <Button-1>                                                                     鼠标左键单击 ...

随机推荐

  1. TabControl控件

    private void Form1_Load(object sender, EventArgs e) { #region 显示样式 tabControl1.ImageList = imageList ...

  2. ISoft(开源)专用下载器

    继 两年的坚持,最后还是决定将ISoft开源 之后,今天再共享一款ISoft专用下载器小工具.这款工具是一年前开发的,也是一直闲置着没去扩展更新.当时开发出来就是仿穿越火线专用下载器的样式来做的,现在 ...

  3. Unity3d中所有特殊的文件夹

    1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor  和 /Editor 是一样的,无论多少个叫Editor的 ...

  4. Jplayer(转)

    Jplayer必须要加载 1.样式  jplayer.blue.monday.css 2.jq jquery.1.6.2.min.js 当前最新版本为1.6.2 3.jplayer的js jquery ...

  5. 修改radio、checkbox、select默认样式的方法

    样式 radio select checkbox 兼容性 现在前端页面效果日益丰富,默认的input组件样式显然已经不能满足需求.趁着这次开发的页面中有这方面的需求,在这里整理一下修改radio.ch ...

  6. 1194: [HNOI2006]潘多拉的盒子 - BZOJ

    Description  Input 第一行是一个正整数S,表示宝盒上咒语机的个数,(1≤S≤50).文件以下分为S块,每一块描述一个咒语机,按照咒语机0,咒语机1„„咒语机S-1的顺序描述.每一块的 ...

  7. mysql.zip免安装版配置

    MYSQL ZIP免安装版配置 1. 下载MySQL 选择自己想要的.本次安装.我使用的是mysql-5.6.17-winx64  地址:http://dev.mysql.com/downloads/ ...

  8. 防止IFRAME页被嵌套

    防止IFRAME页被嵌套 //最大化窗口,防止窗口嵌套 if (parent.location != window.location){ parent.location = window.locati ...

  9. css3实现非矩形图片效果

    经常在网站上看到有一些非矩形的图片展示.在以前可能我会毫不犹豫的直接放上张处理好的图片.但是这样的话确实有些不太友好.每每需要换图的时候,都要去开图像处理软件也是蛮拼的.自从有了css3的选装,妈妈就 ...

  10. [转载]中国天气网API

    最近在做个网站要用到天气网的api,在网上找了些参考资料,这篇文章对天气网api的介绍比较详细,所以转载之,谢谢原作者的辛勤劳动和奉献精神. 原文地址:http://g.kehou.com/t1033 ...