1

pyHookをインストールし、キーボードイベントにハンドラーを正常にアタッチしましたが、ユーザーが英語のレイアウトと他のレイアウトのどちらを入力しているかを確認する必要があります。イベントオブジェクトでこの情報を見つけることができませんでした。

フォーカスされたウィンドウの入力言語をウィンドウで見つけるにはどうすればよいですか?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)
4

1 に答える 1

1

同様の質問に対するこの回答を確認してください。GetGUIThreadInfoを使用してデスクトップ上の現在アクティブなスレッドを判別し、それをGetKeyboardLayoutに渡す必要があるようです。

于 2013-01-07T20:16:14.000 に答える