Python win32api&;pyhook-如何获取用户';什么是打字语言?

Python win32api&;pyhook-如何获取用户';什么是打字语言?,python,winapi,multilingual,keyboard-events,pyhook,Python,Winapi,Multilingual,Keyboard Events,Pyhook,我已安装并成功地将处理程序附加到键盘事件,但现在我需要确定用户是在英文版面还是在其他版面中键入。我在事件对象中找不到此信息 如何在windows上找到聚焦窗口中的键入语言?我尝试过使用GetKeyboardLayout,但没有成功(无论我是用英语还是用其他语言输入,它总是返回相同的值——在我的例子中是希伯来语) 谢谢 由于BrendanMcK的推荐,问题得以解决 Python代码: from ctypes import windll, c_ulong, byref, sizeof, Struct

我已安装并成功地将处理程序附加到键盘事件,但现在我需要确定用户是在英文版面还是在其他版面中键入。我在事件对象中找不到此信息

如何在windows上找到聚焦窗口中的键入语言?我尝试过使用GetKeyboardLayout,但没有成功(无论我是用英语还是用其他语言输入,它总是返回相同的值——在我的例子中是希伯来语)

谢谢

由于BrendanMcK的推荐,问题得以解决

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)

检查类似问题;似乎需要使用GetGuitThreadInfo确定桌面上当前的活动线程,然后将其传递给GetKeyboardLayout。

检查类似问题;似乎您需要使用GetGuitThreadInfo确定桌面上当前的活动线程,然后将其传递给GetKeyboardLayout。

不要在问题中发布答案。请提交答案。这让其他人可以投票,你也可以接受。结果是更好的用户体验,使未来的访问者更容易找到好的答案。不要在问题中张贴答案。请提交答案。这让其他人可以投票,你也可以接受。其结果是更好的用户体验,使未来的访问者更容易找到好的答案。