11

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

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

谢谢你的帮助。

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

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

4

6 回答 6

8

没有这样的 API。我的解决方案是编写一个辅助模块,它会根据os.name.

在 Windows 上,使用Win32 扩展

在 Linux 上,事情要复杂一些,因为真正的操作系统会保护他们的用户免受键盘记录器的攻击[*]。因此,在这里,您将需要一个根进程来监视/dev/input/. 您最好的选择可能是在下面寻找一个/dev/input/by-path/包含字符串"kbd""keyboard". 这在大多数情况下应该有效。

[*]:天哪,当我启动一个与键盘事件挂钩的 Python 程序时,甚至我的病毒/木马扫描程序都不会抱怨...

于 2009-03-24T10:15:09.387 回答
7

作为编写原始 pykeylogger linux 端口的人,我可以说没有真正的跨平台。本质上,我使用记录扩展重写了用于从 xserver 本身捕获键盘事件的 pyhook API。当然,这假设记录扩展存在,已加载到 x 服务器中。

从那里开始,它基本上只是检测您是在 Windows 还是 linux 上,然后为操作系统加载正确的模块。其他一切都应该相同。

看看 pykeylogger 源代码,在 pyxhook.py 中用于类和实现。否则,只需加载该模块或 pyhook,具体取决于操作系统。

于 2009-07-27T17:44:51.913 回答
1

我在 Ubuntu 9.10 上做了一些测试。pykeylogger 似乎没有工作。我尝试更改 /etc/X11/xorg.conf 以允许加载模块,但在特定版本的 ubuntu 中没有 xorg.conf。所以,在我看来,pykelogger 不能在 ubuntu 9.10 上运行!

于 2009-11-03T08:44:38.160 回答
0

TkinterwxPython等跨平台 UI 库具有用于键盘事件的 API。使用这些您可以将 «CTRL» + «@» 映射到一个动作。

于 2009-03-24T10:23:58.027 回答
0

在 linux 上,您可能想看看pykeylogger。出于某种奇怪的原因,从 /dev/input/.... 读取数据在 X 运行时并不总是有效。例如,它不适用于 ubuntu 8.10。Pykeylogger 使用 xlib,当其他方式不使用时,它完全可以工作。我还在研究这个,所以如果你找到更简单的方法,请告诉我。

于 2009-03-25T13:23:18.727 回答
0

在 Linux 下,使用 Xlib 很容易做到这一点。有关详细信息,请参阅此页面:

http://www.larsen-b.com/Article/184.html

于 2009-11-26T09:59:02.060 回答