Python pynput非';理解';希腊文字

Python pynput非';理解';希腊文字,python,python-3.x,keyboard,pynput,Python,Python 3.x,Keyboard,Pynput,早上好, 我使用Python的3.8 pynput(在windows 10中)来获取每次输入的字符(在系统级别),然后获取该字符的unicode from pynput import keyboard def on_press(key): if key == keyboard.Key.esc: #if button escape is pressed close the program listener.stop() else: #if button esca

早上好, 我使用Python的3.8 pynput(在windows 10中)来获取每次输入的字符(在系统级别),然后获取该字符的unicode

from pynput import keyboard


def on_press(key):
    if key == keyboard.Key.esc: #if button escape is pressed close the program
        listener.stop()
    else: #if button escape is not pressed get the unicode code of the button-char pressed
        unicode_code = ord(getattr(key, 'char', '0'))
        print("The unicode is ",unicode_code)
        print("The char entered is",chr(unicode_code))


controller = keyboard.Controller()
# Collect events until released
with keyboard.Listener(on_press=on_press) as listener:
    listener.join()
我面临的问题是,当我将键盘改为希腊语(使用shift+alt)时,它保留了英语的Unicode而不是希腊语的Unicode。 您可以看到附加的屏幕截图,以便更好地理解


如何克服此问题?

不,您没有获得英文unicode代码。您将获得键盘返回的代码的unicode表示形式。无论选择哪种语言,它们都是相同的,因为键盘层设计为始终为相同的键返回相同的代码(根据它们在querty/quertz或其他HID兼容键盘上的位置和/或含义)。您在代码中所做的实际上是还原pynput所做的过程,pynput使用char()/unichar()函数转换键盘代码。想一想:是否有一个希腊代表,例如F11键

我不记得pynput是否支持更高级别的输入,尽管我认为它支持。而且应该可以直接得到你想要的
您需要做的是找到另一个包含发送到输入字段的字符的属性(如果有,我不是pynput专家),或者检查当前键盘语言并适当映射返回的代码。您还可以尝试使用“编解码器”模块播放代码页。最坏的情况包括直接从GUI的输入字段抓取角色。但这将是非常不雅的,野蛮的,如果不是严格必要的话,根本不应该这样做。还有其他从操作系统获取输入的方法,比如使用内置库通过ctypes、wintypes、Mac上的Cocoa/Carbon或Linux上的GTK直接链接到其事件输入系统或内核。

尝试使用pynput版本1.1.7,它可以在那里工作。它在1.4之后被破坏,在这两个版本之间工作,但在程序运行时使用windows快捷方式更改布局,在70%的时间内都无法工作,这意味着windows不会更改语言。或者,您可以在较新的verisons中通过尝试解决方案来解决这个问题,如果您不关心性能,可以实时转换字符。我已经在回购协议的github中为其解决了一个问题