我正在尝试编写一个跨平台的python程序,它将在后台运行,监视所有键盘事件,当它看到一些特定的快捷方式时,它会生成一个或多个自己的键盘事件。例如,将Ctrl- @映射到“my.email@address”可能很方便,因此每次某个程序询问我的电子邮件地址时,我只需要输入Ctrl- @即可。
我知道这些程序已经存在,我正在重新发明轮子......但我的目标只是了解有关低级键盘API的更多信息。此外,这个问题的答案可能对其他程序员有用,例如,如果他们想要启动需要密码的SSH连接,而不使用pexpect。
谢谢你的帮助。
注意:有 一个类似的问题 但它仅限于Windows平台,并且不需要python。我正在寻找一个跨平台的python api。还有其他与键盘事件有关的问题,但显然他们对系统范围的键盘事件不感兴趣,只是特定于应用程序的键盘快捷键。
编辑:我应该在这里添加一个免责声明:我做 不 想写一个键盘记录器。如果我需要一个键盘记录器,无论如何我都可以从网上下载一个。 ;-)
没有这样的API。我的解决方案是编写一个帮助程序模块,它将使用不同的帮助程序,具体取决于 os.name
。
在Windows上,使用 Win32扩展。
在Linux上,事情有点复杂,因为真正的操作系统可以保护用户不受键盘记录器的攻击[*]。所以在这里,你需要一个root进程来监视其中一个句柄 /dev/input/
。您最好的选择可能是寻找下面的条目 /dev/input/by-path/
其中包含字符串 "kbd"
要么 "keyboard"
。这应该适用于大多数情况。
[*]:Jeez,当我启动一个挂钩键盘事件的Python程序时,甚至我的病毒/木马扫描程序都会抱怨...
作为编写原始pykeylogger linux端口的人,我可以说没有真正的跨平台端口。基本上,我重写了pyhook API,用于使用记录扩展从xserver本身捕获的键盘事件。当然,这假设记录扩展在那里,加载到x服务器。
从那里开始,它基本上只是检测你是在Windows上,还是linux上,然后为操作系统加载正确的模块。其他一切都应该是相同的。
在pyxhook.py中查看pykeylogger源代码,了解类和implimentation。否则,只需加载该模块或pyhook,具体取决于操作系统。
我在Ubuntu 9.10上做了一些测试。 pykeylogger似乎不起作用。我试图改变/etc/X11/xorg.conf以便允许加载模块但是在特定版本的ubuntu中没有xorg.conf。所以,在我的观点中,pykelogger不适用于ubuntu 9.10 !!
跨平台的UI库,如 Tkinter的 要么 wxPython的 有键盘事件的API。使用这些可以将«CTRL»+«@»映射到一个动作。
在linux上,你可能想看看 pykeylogger。出于某些奇怪的原因,从/ dev / input / ....读取并不总是在X运行时起作用。例如,它不适用于ubuntu 8.10。 Pykeylogger使用xlib,它完全适用于其他方式。我仍然在研究这个,所以如果你找到一个更简单的方法,请告诉我。
在Linux下,使用Xlib可以很容易地完成这项工作。有关详情,请参阅此页面:
http://www.larsen-b.com/Article/184.html