win32api pyhook 获取用户的输入语言?

2024-09-24 04:32:06 发布

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

我安装了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)

Tags: rect语言fields键入事件布局structureclass