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)