2013-01-07 48 views
1

我安裝了pyHook併成功將處理程序附加到鍵盤事件,但現在我需要確定用戶是否正在輸入英文版面或其他版面。我無法在事件對象中找到這些信息。win32api&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) 
+0

不要在您的問題中發佈答案。改爲提交答案。這可以讓其他人對它投票,並且你接受它。結果是更好的用戶體驗,使未來的訪問者更容易找到好的答案。 – IInspectable

回答

1

檢查this answer到類似的問題;似乎您需要使用GetGUIThreadInfo來確定桌面上當前活動的線程,然後將其傳遞給GetKeyboardLayout。

相關問題