linux下模拟键盘的几种方法
1、使用GTK中的GdkEvent
GdkEvent *event;
event = gdk_event_new (GDK_KEY_PRESS); //按键按下
event->key.send_event = TRUE;
event->key.keyval = GDK_1;
event->key.window = window;
gtk_main_do_event (event);
gdk_event_free (event);
event = gdk_event_new (GDK_KEY_RELEASE); //按键弹起
event->key.send_event = TRUE;
event->key.keyval = GDK_1;
event->key.window = window;
gtk_main_do_event (event);
gdk_event_free (event);
这种方法并不适合所有情况,例如编辑框显示不了字符,按键消息倒是能收到,不知道是不是我的程序有问题,欢迎大家指正。
2、使用Xlib
#include <X11/extensions/XTest.h>
#include <X11/keysym.h>
Display *disp = XOpenDisplay (NULL);
keysym = XK_1;
//True为按下,False为弹起
XTestFakeKeyEvent (disp, XKeysymToKeycode (disp, keysym), True, CurrentTime);
XTestFakeKeyEvent (disp, XKeysymToKeycode (disp, keysym), False, CurrentTime);
XCloseDisplay (disp);
编译的时候要加上-lXtst选项,这种情况依赖于XLib。
3、直接写键盘设备
#include <linux/input.h>
/* open keyboard */
fd_kb = open ("/dev/input/event0", O_RDWR);
struct input_event event;
event.code = KEY_1;
event.type = EV_KEY;
event.value = 1; //1表示按下,0表示释放,2表示长按
gettimeofday (&event.time, 0);
if (write (fd_kb, &event, sizeof (event)) != sizeof (event))
{
printf ("write /dev/input/event0 failed/n");
}
event.value = 0;
if (write (fd_kb, &event, sizeof (event)) != sizeof (event))
{
printf ("write /dev/input/event0 failed/n");
}
这种方法是最通用的,不管底层用的是X还是DFB,都可以用,推荐适用这种方法。以上三种方法都在debian下验证通过。
linux下模拟键盘的几种方法相关推荐
- linux键盘模拟程序,linux下模拟键盘的几种方法
1.使用GTK中的GdkEvent GdkEvent *event; event = gdk_event_new (GDK_KEY_PRESS); //按键按下 event- ...
- Linux下进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...
- linux系统调用劫持隐藏进程,linux 下隐藏进程的一种方法及遇到的坑
前言 1.本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 2.思路就是利用 LD_PRELOAD 来实现系统函数的劫 ...
- linux存储安装教程,在Linux下安装Pngquant的三种方法:从存储库,源代码及使用Cargo安装...
本文介绍在Linux操作系统下安装Pngquant的三种方法,即从存储库.从源代码及使用Cargo安装,可用在Arch Linux.Debian.Ubuntu.Linux Mint.Fedora.op ...
- Linux下安装软件的几种方法
来源: http://blog.csdn.net/shun01/article/details/22041339 怎么安装应用软件? 我的软件安装在什么地方? 如何删除不要的应用软件? -- 下面,我 ...
- linux下配置ip地址四种方法(图文)
配置ip地址四种方法 (1)Ifconfig命令 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...
- Linux下打开ISO文件两种方法
方法一.Linux下用mount挂载命令 在网上下载的软件盘是iso格式的,不刻成光盘就可以读取里面的文件.不用解压. 在终端用mount -o loop /mnt/*/1.iso /mnt/cdro ...
- linux下删除空行的几种方法
vim下删除空行可以真正修改文件,但是用于大容量文件时很慢,而且也不知道何时修改完成: 其他方法只是可以显示删除空行后的内容,而不改变文档内容,若要保存修改后的结果需在file后加上>newfi ...
- linux清除硬盘,linux下清除硬盘的几种方法
硬盘在送人或丢弃时,应该小心一点,不然就成艳照门主角了,谁也不能保证自己的硬盘上没有什么不便于示人的东西,因此,你需要擦除硬盘上的数据. 理论上讲,目前,不存在完全安全的方法,因为,硬盘发展到如今,基 ...
- linux配置ip地址 suse_SUSE Linux下设置IP的两种方法
第一种SUSE Linux IP设置方法 ifconfig eth0 192.168.1.22 netmask 255.255.255.0 up route add default gw 192.16 ...
最新文章
- 靠Python数据分析已赚10w的本科生,附赠学习资料
- Samba 4.10 发布,完全支持 Python 3
- shell-sed脚本
- maya为什么不能导出fbx_Maya无法展 UV的解决办法
- xampp for Ubuntu安装.run文件
- 盗版与互联网是一对连体婴,会员制背后才是那把手术刀!
- aop简介-基于cglib的动态
- 怎么让php文件请求一次连接,php 如何锁定接口,让一个接口,同一时间只处理同一人的一次请求?...
- 【java】java 一个线程占用多少内存
- MySql的用户管理权限
- 如何理解 Python 中的面向对象编程?
- 关于计算机的内存的一点常识
- Atitti python2.7安装 numpy attilax总结
- [c++11]我理解的右值引用、移动语义和完美转发
- 杰理AC692X系列---关于692x及693x的打开在线调EQ功能(4)
- 3DMax 安装 超图 插件
- 计算机专业的浪漫情话,计算机科学与技术表白情话
- 密度分析(七) Python实现
- 区块链技术以太坊简介
- 数据库表的字段常用数据类型