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

#include

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

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

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

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

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

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

  3. linux删除test文件夹,Linux删除目录下的文件的几种方法

    Linux删除目录下的文件的几种方法 删除当前目录下的文件 1.rm -f * #最经典的方法,删除当前目录下的所有类型的文件 2.find . -type f -delete或find . -typ ...

  4. linux删除目录或文件命令行,Linux删除目录下的文件的10种方法小结

    看到了一遍文章,便突发奇想的想起Linux中删除目录下的所有文件的方法:整理了几个,如有不足,还望读者不吝赐教! 删除当前目录下的文件 1.rm -f * #最经典的方法,删除当前目录下的所有类型的文 ...

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

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

  6. ​linux中使用文本工具截取ip 的几种方法

    linux中使用文本工具截取ip 的几种方法 1,使用awk工具 [root@mycentos data]# ifconfig ens33 ens33: flags=4163<UP,BROADC ...

  7. 在Linux中查找和删除重复文件的4种方法

    大神教你在Linux中查找和删除重复文件的4种方法 在本教程中,您将学习如何使用rdfind和fdupes命令行工具以及称为DupeGuru和FSlint的GUI工具在Linux中查找和删除重复文件. ...

  8. linux如何把用户加组内,在Linux中将用户添加到特定组的四种方法

    在Linux中将用户添加到特定组的四种方法 Linux组是用于管理Linux中用户帐户的组织单位. 对于Linux系统中的每个用户和组,它都有唯一的数字标识号. 它称为用户ID(UID)和组ID(GI ...

  9. Java selenium操作下拉滚动条的几种方法

    数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法 我这里演示的是Java ...

  10. winxp一键锁定计算机,WinXP下锁定计算机的3种方法

    WinXP下锁定计算机的3种方法 2009-12-08 04:53:11 脚本之家 这两个按钮的设置方式共有3种: 1.不使用欢迎屏幕(此时亦不能使用快速用户切换). 2.仅使用欢迎屏幕. 3.既使用 ...

最新文章

  1. zabbix nginx php postgresql,debian10安装zabbix4.2+nginx+postgresql
  2. 二进制代码查看器Binary Viewer下载教程
  3. CodeForces - 17E Palisection(回文自动机/Palindrome Series优化dp)
  4. 解决Establishing SSL connection without servers identity verification is not recommended问题
  5. CentOS 安装最新版本 Git
  6. delphi dispose释放内存的方法
  7. windows 防火墙疑难解答程序_Win8系统设置允许程序通过防火墙的方法
  8. 微信小程序中rpx与rem单位使用
  9. 接口测试工具SoapUI(一)安装和破解
  10. 计算机操作系统-2-处理器管理
  11. 阿里云商标注册申请智能、顾问和安心区别及选择攻略
  12. 颠覆传统股票证券市场的可能是ICO代币(TOKEN)
  13. 数据全生命周期管理,华为FusionData一个方案搞定
  14. 教程篇(7.0) 03. FortiGate安全 防火墙策略 ❀ Fortinet 网络安全专家 NSE 4
  15. 篡改计算机网络,基于TCP协议的网络数据实时篡改.doc
  16. 数据结构学习(考研408)
  17. Python pygame 坦克大战
  18. 7月第3周回顾:裁员潮袭卷IT人 雅虎服“软”愿被收购
  19. C语言 进阶版三子棋小游戏
  20. 软件测试面试题:优惠券发布后测试场景图和设计?

热门文章

  1. resNet论文学习心得
  2. 【MM32F5270开发板试用】定制MicroPython及读取MPU6050数据到OLED1306
  3. 毕业论文必备技巧:Word页脚及页眉设置
  4. 概率破玄机,统计解迷离
  5. 【LSR标签平滑理解】
  6. 微课 展示 php 源码,PHP从零基础到项目实战(微课视频版)
  7. VM虚拟机 .vmdk文件,拆分多个文件,合并单个文件
  8. Android Window悬浮窗窗口全屏(隐藏导航栏状态栏)
  9. 51单片机入门学习 第六天
  10. 基于HTML和CSS完成京东页面的制作