2013-03-21 42 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