2013-03-21 41 views
0

我正在使用C#中的互操作鍵盤狀態KeyboardState和佈局

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool GetKeyboardState(byte[] lpKeyState); 

我的問題是,顯然當我切換鍵盤佈局(即從QWERTY到德沃夏克與按Ctrl-Shift鍵)功能GetKeyboardState返回不同虛擬鍵碼。有沒有辦法根據實際鍵盤製造商使用的佈局簡單獲取鍵碼?

回答

0

你需要映射到鍵盤掃描碼的虛擬鍵碼。請參閱MapVirtualKeyEx

+0

嗯,所以我想我從我得到了使用GetKeyboardState到的掃描代碼鍵代碼映射,使用當前的鍵盤佈局(不管這可能),然後我使用QWERTY鍵盤佈局的得到掃描碼映射所需的鍵碼? 有沒有辦法直接獲取掃描碼? – 2013-03-21 14:01:19

+0

我不知道有什麼方法可以直接將掃描代碼,而無需編寫一個鍵盤鉤子。您可以通過編碼程序來檢查agains掃描碼,而不是QWERTY虛擬按鍵消除掃描代碼QWERTY的映射。或者,您可以創建scancode-to-QWERTY映射作爲程序中的查找表。只需在程序啓動時預先創建它即可。 – 2013-03-21 14:25:48

+0

啊,我得捕捉WM_KEYDOWN消息,並從那裏提取的掃描碼.... – 2013-03-21 14:34:07