zoukankan      html  css  js  c++  java
  • linux模拟键盘按键方案(收藏)

    在这以前,我一直以为,除非搞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的详细接口定义: http://docsrv.sco.com:507/en/man/html.Xext/XTEST.Xext.html

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

    virtkey(https://launchpad.net/virtkey): python extension for emulating keypresses and getting current keyboard layout

    看看,多么完美的解决方案,Ubuntu下有个叫OnBoard的虚拟键盘程序,就是用这个包包实现的。
    我发现python-virtkey依赖于libxtst6这个包,那么肯定也是用Xtest实现的咯~一翻源码,果然如此。
    (源码:http://bazaar.launchpad.net/~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的源码

  • 相关阅读:
    SpringMVC
    MyBatis 与 Spring 的完美整合方法
    持久层之 MyBatis: 第三篇 :缓存 And 高级查询
    持久层之 MyBatis: 第二篇 :动态SQL And多表查询
    C语言实现简单epoll服务器(二)
    C语言简单实现epoll服务器(一)
    shell编程题(十九)
    shell编程题(十七)
    shell编程题(十六)
    shell编程题(十三)
  • 原文地址:https://www.cnblogs.com/evilloop/p/2205895.html
Copyright © 2011-2022 走看看