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下模拟键盘的几种方法相关推荐

  1. linux键盘模拟程序,linux下模拟键盘的几种方法

    1.使用GTK中的GdkEvent GdkEvent *event; event = gdk_event_new (GDK_KEY_PRESS);              //按键按下 event- ...

  2. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  3. linux系统调用劫持隐藏进程,linux 下隐藏进程的一种方法及遇到的坑

    前言 1.本文所用到的工具在 https://github.com/gianlucaborello/libprocesshider 可以下载 2.思路就是利用 LD_PRELOAD 来实现系统函数的劫 ...

  4. linux存储安装教程,在Linux下安装Pngquant的三种方法:从存储库,源代码及使用Cargo安装...

    本文介绍在Linux操作系统下安装Pngquant的三种方法,即从存储库.从源代码及使用Cargo安装,可用在Arch Linux.Debian.Ubuntu.Linux Mint.Fedora.op ...

  5. Linux下安装软件的几种方法

    来源: http://blog.csdn.net/shun01/article/details/22041339 怎么安装应用软件? 我的软件安装在什么地方? 如何删除不要的应用软件? -- 下面,我 ...

  6. linux下配置ip地址四种方法(图文)

    配置ip地址四种方法 (1)Ifconfig命令 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...

  7. Linux下打开ISO文件两种方法

    方法一.Linux下用mount挂载命令 在网上下载的软件盘是iso格式的,不刻成光盘就可以读取里面的文件.不用解压. 在终端用mount -o loop /mnt/*/1.iso /mnt/cdro ...

  8. linux下删除空行的几种方法

    vim下删除空行可以真正修改文件,但是用于大容量文件时很慢,而且也不知道何时修改完成: 其他方法只是可以显示删除空行后的内容,而不改变文档内容,若要保存修改后的结果需在file后加上>newfi ...

  9. linux清除硬盘,linux下清除硬盘的几种方法

    硬盘在送人或丢弃时,应该小心一点,不然就成艳照门主角了,谁也不能保证自己的硬盘上没有什么不便于示人的东西,因此,你需要擦除硬盘上的数据. 理论上讲,目前,不存在完全安全的方法,因为,硬盘发展到如今,基 ...

  10. 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 ...

最新文章

  1. 靠Python数据分析已赚10w的本科生,附赠学习资料
  2. Samba 4.10 发布,完全支持 Python 3
  3. shell-sed脚本
  4. maya为什么不能导出fbx_Maya无法展 UV的解决办法
  5. xampp for Ubuntu安装.run文件
  6. 盗版与互联网是一对连体婴,会员制背后才是那把手术刀!
  7. aop简介-基于cglib的动态
  8. 怎么让php文件请求一次连接,php 如何锁定接口,让一个接口,同一时间只处理同一人的一次请求?...
  9. 【java】java 一个线程占用多少内存
  10. MySql的用户管理权限
  11. 如何理解 Python 中的面向对象编程?
  12. 关于计算机的内存的一点常识
  13. Atitti python2.7安装 numpy attilax总结
  14. [c++11]我理解的右值引用、移动语义和完美转发
  15. 杰理AC692X系列---关于692x及693x的打开在线调EQ功能(4)
  16. 3DMax 安装 超图 插件
  17. 计算机专业的浪漫情话,计算机科学与技术表白情话
  18. 密度分析(七) Python实现
  19. 区块链技术以太坊简介
  20. 数据库表的字段常用数据类型

热门文章

  1. 【CocosCreator】单机游戏存档的常用加密解密方法
  2. Gradle编译时,assets文件未打包进apk
  3. 计算机控制plc开机,PLC控制系统与工控计算机控制系统的区别
  4. python-电脑时间校准
  5. python结巴分词去掉虚词_jieba中文处理 python
  6. 中间状态+三方预约下单接口测试项目
  7. “远程网络教学系统”UML用例图(练习题)
  8. SQLite3使用详解之二
  9. TMS320F2837x开发例程使用手册(3)
  10. 计算机电缆一般用在哪里,计算机电缆的型号有哪些,它们的用途是什么