linux下模拟键盘的几种方法
2010-05-24 20:55
651 查看
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下验证通过。
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 虚拟输入设备(uinput)模拟鼠标和键盘的使用方法
- 在windows下模拟鼠标键盘输入的几种方法 (附带源代码)
- Linux模拟鼠标和键盘事件的方法
- 引导linux的几种方法
- 几种Linux 查询外网出口IP的方法
- Linux 技巧:让进程在后台可靠运行的几种方法
- Linux 技巧:让进程在后台可靠运行的几种方法
- linux-CentOS6.4安装Memcached+memcached扩展+安装memcache扩展+Memcache+mecached同步SESSION的几种方法
- 用VB模拟键盘事件的N种方法
- (转)Linux技巧:让进程在后台可靠运行的几种方法
- linux中快速清空文件内容的几种方法
- Linux 技巧:让进程在后台可靠运行的几种方法
- Linux下启动orcale数据库几种方法总结
- 如何在linux下shell编写脚本中模拟键盘输入
- linux下几种不同方式软件卸载方法
- Linux下加载Windows分区的几种方法
- Linux 技巧:让进程在后台可靠运行的几种方法
- iOS点击空白处隐藏键盘的几种方法
- 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(一)
- iOS上键盘出现时输入框不被覆盖的几种方法分析