/************************************************************************
* 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. 可变参数列表---以dbg()为例

    在UART驱动的drivers/serial/samsung.h中遇到如下定义: #ifdef CONFIG_SERIAL_SAMSUNG_DEBUG extern void printascii(c ...

  2. Python操作RabbitMQ初体验(一)

    由于想用Python实现一套分布式系统,来管理和监控CDN的内容与运行状态,误打误撞认识了RabbitMQ,推荐的人很多,如余锋<我为什么要选择RabbitMQ>等等. 在MQ这个词汇映入 ...

  3. ubuntu 设置显示器的亮度

    ubuntu电脑重新启动后,亮度都变成了最亮.似乎也没胡地方可以设置.只好通过写个脚本来做这个事了. # -*- coding: utf-8 -*- import dbus bus = dbus.Se ...

  4. (转)《深入理解java虚拟机》学习笔记3——垃圾回收算法

    Java虚拟机的内存区域中,程序计数器.虚拟机栈和本地方法栈三个区域是线程私有的,随线程生而生,随线程灭而灭:栈中的栈帧随着方法的进入和退出而进行入栈和出栈操作,每个栈帧中分配多少内存基本上是在类结构 ...

  5. 友盟分享在appdelegate中的调用语句举例

    //友盟 [UMSocialData setAppKey:UmengAppkey]; [UMSocialConfig setSupportedInterfaceOrientations:UIInter ...

  6. Csharp volatile 关键字

    volatile 关键字指示一个字段可以由多个同时执行的线程修改.声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制.这样可以确保该字段在任何时间呈现的都是最新的值. vola ...

  7. 1043: [HAOI2008]下落的圆盘 - BZOJ

    Description有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求.Input n ri xi y1 ... rn xn y ...

  8. 3.7 spring-property 子元素的使用与解析

    1.0 Property子元素的使用 property 子元素是再常用不过的了, 在看Spring源码之前,我们先看看它的使用方法, 1. 实例类如下: public class Animal { p ...

  9. Extjs4.2布局——Ext.container.ViewportView

    先贴出官方文档的关于此布局的描述:“ 一个专门的容器用于可视应用领域(浏览器窗口). Viewport渲染自身到网页的documet body区域, 并自动将自己调整到适合浏览器窗口的大小,在窗口大小 ...

  10. DataGridView 列自适应宽度 设置

    代码: Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 或者设置DataGridView的AutoSizeColu ...