Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92307500
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-29 08:07:53

原文:

在这以前,我一直以为,除非搞X Window级别的开发,否则根本没法在Linux下模拟键盘消息,或者说键盘事件。像QT,GTK这些High Level的GUI library貌似根本没有提供这些功能。这么看起来,想要实现与Windows下SendMessage(hwnd, KEY_PRESS,0 ,128 )这样类似的功能还真不容易。这大概是Linux下接口不统一的弊端吧。不过还好,我们有XTest(the X test extension)这个Xlib的扩展库,用它可以实现我们想要的模拟键盘按键的功能。
比如说…
XTestFakeMotionEvent(…) // 模拟鼠标移动事件
XTestFakeButtonEvent(…) // 模拟鼠标按键事件
XTestFakeKeyEvent(…) // 模拟键盘按键事件
当然别忘了它的头文件“X11/extensions/XTest.h”
这里还有Xtest的详细接口定义:

用法还是比较简单的,例子我先不给出,因为我发现了更加便捷的方法:那就是python的第三方扩展库virtkey

virtkey(): python extension for emulating keypresses and getting current keyboard layout

看看,多么完美的解决方案,Ubuntu下有个叫OnBoard的虚拟键盘程序,就是用这个包包实现的。
我发现python-virtkey依赖于libxtst6这个包,那么肯定也是用Xtest实现的咯~一翻源码,果然如此。
(源码:~onboard/virtkey/main/files)
使用方法真的很简单哦,主要有两系列接口:
press_keysym/release_keysym

press_unicode/release_unicode

前者接受keysym作为参数,后者接受键位的unicode.

举个例子:
import virtkey
import time
def simulate():
v = virtkey.virtkey()
time.sleep(3)
v.press_unicode(ord(”a”))
v.release_unicode(ord(”a”))
v.press_keysym(65363)
v.release_keysym(65363)

simulate()

使用python运行,不出意外的话,在你的当前光标处会出现一个新字母“a”,而且光标会右移一位。

如果不用virtkey怎么办嗯?好说,请看virtkey的源码。

阅读(842) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~