English 中文(简体)
有跨平台的Python低级API来捕获或生成键盘事件吗?
原标题:
  • 时间:2009-03-24 09:48:25
  •  标签:

我正在尝试编写一个跨平台的Python程序,可以在后台运行,监视所有键盘事件,并在看到特定的快捷方式时,生成自己的一个或多个键盘事件。例如,将Ctrl-@映射到“my.email@address”可能很方便,这样每次某些程序要求我输入电子邮件地址时,我只需要键入Ctrl-@。

我知道这样的程序已经存在,而我正在重新发明轮子… 但我的目标只是为了更深入地了解底层键盘API。此外,这个问题的答案可能对其他程序员有用,例如如果他们想启动需要密码的SSH连接,而不使用pexpect。

谢谢你的帮助。 (Xiè xiè nǐ de bāng zhù.)

注意:有相似的问题,但它仅限于Windows平台,并且不需要Python。我正在寻找跨平台的Python API。还有其他与键盘事件相关的问题,但显然它们对系统范围的键盘事件不感兴趣,只是应用程序特定的键盘快捷键。

编辑:我应该在这里添加一个免责声明:我想编写键盘记录器。如果我需要键盘记录器,我可以在网上下载。;-)

最佳回答

没有这样的API。我的解决方案是编写一个助手模块,根据 os.name 的值使用不同的助手。 (“os.name”指的是操作系统名称,如Windows、Linux、Mac等)

在 Windows 上,使用 Win32扩展库

在Linux上,情况会更加复杂,因为真实的操作系统会保护用户免受键盘记录器攻击[*]。因此,在这里,您需要一个根进程来监视/dev/input/中的一个句柄。您最好的选择可能是在/dev/input/by-path/下查找包含字符串"kbd""keyboard"的项。在大多数情况下,这应该可以正常工作。

天哪,连我的病毒/木马扫描器都不会在我启动一个钩取键盘事件的Python程序时抱怨了...

问题回答

作为编写原始Pykeylogger Linux端口的人,我可以说并没有真正的跨平台版本。基本上,我为键盘事件重新编写了Pyhook API,以从X服务器本身捕获,使用记录扩展。当然,这假设记录扩展存在并加载到X服务器中。

从那里开始,基本上只需要检测你是否在Windows或Linux上,然后加载适用于该操作系统的正确模块。其他所有内容都应该相同。

看一下pykeylogger源代码,在pyxhook.py中查看类和实现。否则,根据操作系统加载那个模块,或者加载pyhook。

我在Ubuntu 9.10上进行了一些测试。pykeylogger似乎无法正常工作。我尝试更改/etc/X11/xorg.conf以允许模块加载,但在该特定版本的ubuntu中没有xorg.conf。所以我认为,在ubuntu 9.10上,pykelogger无法正常工作!!

跨平台的UI库,例如TkinterwxPython,具有用于键盘事件的API。使用它们,您可以将“CTRL”+“@”映射到操作。

在Linux上,您可能想查看pykeylogger。出于某种奇怪的原因,在运行X时,从/dev/input/...中读取时并不总是有效的。例如,在Ubuntu 8.10上就不起作用。 Pykeylogger使用的是xlib,在另一种方法无效时正常工作。我仍在研究这个问题,如果您找到了更简单的方法,请告诉我。

在Linux下,使用Xlib可以很容易地实现这一点。请参阅此页面了解详情:

将此翻译成中文:http://www.larsen-b.com/Article/184.html





相关问题
热门标签