如何获取Python中的键码

2024-05-15 11:51:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须知道按了什么键,但不需要字符的代码,我想知道何时有人按了“A”键,即使获得的键是“A”或“A”,所有其他键也是如此。

我不能使用PyGame或任何其他库(包括Tkinter)。只有python标准库。这必须在终端上完成,而不是在图形界面上。

不需要字符代码。我需要知道密码。

例如:

ord('a') != ord('A')                      # 97 != 65
someFunction('a') == someFunction('A')    # a_code == A_code

Tags: 代码终端密码标准tkintercode字符pygame
3条回答

根据您要完成的任务,也许使用pygame这样的库可以实现您想要的功能。Pygame包含了比Python标准库通常提供的更高级的按键处理。

您可能需要使用Tkinter,这是“标准”Python gui,并且已经包含在Python中很多年了。

由于数据进出命令行进程的方式,命令行解决方案可能不可用。GUI程序(某种风格或另一种风格)都通过(可能是库包装的)事件流接收用户输入。每个事件都将记录事件的详细信息。对于击键事件,记录可能包含某些编码中的任何键代码、修改键位字段或文本字符。哪些字段以及如何命名取决于调用的事件库。

命令行程序通过字符流接收用户输入。无法捕获较低级别的数据。正如myroslav在他的文章中所解释的,tty可以是煮熟的或未煮熟的模式,唯一的区别是在煮熟的模式下,终端将为您处理(一些)控制字符,比如delete和enter,以便进程接收输入行,而不是一次1个字符。

处理任何低于此值的内容都需要(依赖于操作系统)系统调用或在/dev.Python的标准库中打开字符设备。

请参阅tty标准模块。它允许使用tty.setcbreak(sys.stdin)从默认的面向行(cooke)模式切换到面向字符(cbreak)模式。从sys.stdin读取单个字符将导致下一个按下的键盘键(如果它生成代码):

import sys
import tty
tty.setcbreak(sys.stdin)
while True:
    print ord(sys.stdin.read(1))

注意:解决方案仅限于Unix(包括Linux)。

编辑:在Windows上尝试msvcrt.getche()/getwche()。/我无处可去。。。


编辑2:通过ctypes.windll(请参阅example at SO)和ReadConsoleInput函数利用win32低级控制台API。你应该过滤掉按键-e.EventType==KEY_EVENT并寻找e.Event.KeyEvent.wVirtualKeyCode值。可以在http://www.benryves.com/tutorials/?t=winconsole&c=4找到应用程序的示例(不是在Python中,只是为了得到一个想法)。

相关问题 更多 >