问题 是否有跨平台的python低级API来捕获或生成键盘事件?


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

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

谢谢你的帮助。

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

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


1784
2018-03-24 09:48


起源

这里 是一个适用于OS X的解决方案 - Phylliida


答案:


没有这样的API。我的解决方案是编写一个帮助程序模块,它将使用不同的帮助程序,具体取决于 os.name

在Windows上,使用 Win32扩展

在Linux上,事情有点复杂,因为真正的操作系统可以保护用户不受键盘记录器的攻击[*]。所以在这里,你需要一个root进程来监视其中一个句柄 /dev/input/。您最好的选择可能是寻找下面的条目 /dev/input/by-path/ 其中包含字符串 "kbd" 要么 "keyboard"。这应该适用于大多数情况。

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


8
2018-03-24 10:15



非常明确的回答,非常感谢你。 :-) - MiniQuark


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

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

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


7
2017-07-27 17:44





我在Ubuntu 9.10上做了一些测试。 pykeylogger似乎不起作用。我试图改变/etc/X11/xorg.conf以便允许加载模块但是在特定版本的ubuntu中没有xorg.conf。所以,在我的观点中,pykelogger不适用于ubuntu 9.10 !!


1
2017-11-03 08:44



我也是。我无法在ubuntu 9.10上运行pykeylogger - Rory
为了记录,我认为这是这个错误,防止pykeylogger在ubuntu 9.10上工作 bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/315456 - Rory


跨平台的UI库,如 Tkinter的 要么 wxPython的 有键盘事件的API。使用这些可以将«CTRL»+«@»映射到一个动作。


0
2018-03-24 10:23



不幸的是,这不会给我一个系统范围的键盘监视器,只是一个特定于应用程序的监视器。 - MiniQuark


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


0
2018-03-25 13:23



这个答案差不多有三年了...... - Kim Stebel


在Linux下,使用Xlib可以很容易地完成这项工作。有关详情,请参阅此页面:

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


0
2017-11-26 09:59