作者:重庆刮刮匠 | 来源:互联网 | 2023-02-12 20:24
我的键盘有2种键盘语言,我一直在切换,希腊语和英语.如何获取当前的键盘语言?是否有任何有用的库可以为我做这个技巧?我使用的是python 3.5.2,Windows 10
1> Vladislav Ma..:
使用该ctypes
库的以下方法对我有用.
# My keyboard is set to the English - United States keyboard
>>> import ctypes
# For debugging Windows error codes in the current thread
>>> user32 = ctypes.WinDLL('user32', use_last_error=True)
>>> curr_window = user32.GetForegroundWindow()
>>> thread_id = user32.GetWindowThreadProcessId(curr_window, 0)
# Made up of 0xAAABBBB, AAA = HKL (handle object) & BBBB = language ID
>>> klid = user32.GetKeyboardLayout(thread_id)
67699721
# Language ID -> low 10 bits, Sub-language ID -> high 6 bits
# Extract language ID from KLID
>>> lid = klid & (2**16 - 1)
# Convert language ID from decimal to hexadecimal
>>> lid_hex = hex(lid)
'0x409'
# I switched my keyboard to the Russian keyboard
>>> curr_window = user32.GetForegroundWindow()
>>> thread_id = user32.GetWindowThreadProcessId(curr_window, 0)
>>> klid = user32.GetKeyboardLayout(thread_id)
68748313
# Extract language ID from KLID
>>> lid = klid & (2**16 - 1)
# Convert language ID from decimal to hexadecimal
>>> lid_hex = hex(lid)
'0x419'
您可以按照希腊语(0x408
)或您要检测的任何其他语言执行相同的过程.如果你感兴趣,这里是一个纯文本列表,这里是微软列出的所有lid_hex
可能采用的十六进制值,给定一个输入语言.
作为参考,LCID以这种格式存储(正如我在代码的注释中所描述的那样).
只需确保GetKeyboardLayout(thread_id)
每次在键盘上切换语言时都要打电话.
编辑:
正如@furas在评论中提到的,这是系统相关的.如果您要将代码移植到Windows 10以外的操作系统(甚至可能是早期版本的Windows,如果LCID从那时起已经改变),这种方法将无法按预期工作.
编辑2:
我的第一个解释klid
是不正确的,但感谢@ eryksun的评论,我已经纠正了这一点.