我安装了pyHook并成功地将处理程序附加到键盘事件,但现在我需要找出用户是用英语布局还是其他布局键入。我在事件对象中找不到这个信息。在
如何在windows上找到焦点窗口中的键入语言是什么?我尝试使用GetkeyboardLayout但没有成功(无论我是用英语还是用不同的语言输入,它总是返回相同的值,在我的例子中是希伯来语)。在
谢谢
多亏了布伦丹麦克的推荐才得以解决。在
Python代码:
from ctypes import windll, c_ulong, byref, sizeof, Structure
user32 = windll.user32
class RECT(Structure):
_fields_ = [
("left", c_ulong),
("top", c_ulong),
("right", c_ulong),
("bottom", c_ulong)];
class GUITHREADINFO(Structure):
_fields_ = [
("cbSize", c_ulong),
("flags", c_ulong),
("hwndActive", c_ulong),
("hwndFocus", c_ulong),
("hwndCapture", c_ulong),
("hwndMenuOwner", c_ulong),
("hwndMoveSize", c_ulong),
("hwndCaret", c_ulong),
("rcCaret", RECT)
]
def get_layout():
guiThreadInfo = GUITHREADINFO(cbSize=sizeof(GUITHREADINFO))
user32.GetGUIThreadInfo(0, byref(guiThreadInfo))
dwThread = user32.GetWindowThreadProcessId(guiThreadInfo.hwndCaret, 0)
return user32.GetKeyboardLayout(dwThread)
检查this answer类似的问题;似乎您需要使用GetGUIThreadInfo来确定桌面上当前的活动线程,然后将其传递给GetKeyboardLayout。在
相关问题 更多 >
编程相关推荐