我的应用程序必须显示系统中安装的所有输入语言以及每种输入语言的键盘布局。
例如:
[InputLaguage]
Tamil
[Keyboard layouts]
US
Murasu Anjal
Tamil
English
US
我们可以从
GetKeyboardLayoutList(User32.dll)
API function by splitting LWORD and HWORD.
但是我没有找到从键盘布局标识符中获取键盘布局名称的方法。
请帮帮我...
谢谢
3条答案
按热度按时间vd8tlhqk1#
这不是你问题的完整答案,但这里有一大块是我花了几个小时手工编译的。它是每个布局代码与我的Windows 7版本可用的布局名称的Map。我不得不手工输入名称,所以请原谅这里的任何打字错误。代码是通过编程收集的。
ngynwnxp2#
简短回答:
您可以看看System.Windows.Forms/src/System/Windows/Forms/InputLanguage.cs,它现在的实现有些不完整。
正确的算法为posted here:
键盘布局名称信息位于HKEY_LOCAL_MACHINE\system\currentcontrolset\control\keyboard layouts中。我认为. NET代码应使用GetKeyboardLayoutList的低位字,并遍历HKLM\SystemCurrentControlSet\Control\Keyboard Layouts中的所有条目,以查找匹配的低位字。当低位字匹配时,如果高位字&0xF000,则查找与布局ID的匹配。如果高位字&0xF000 == 0,则使用高位字查找HKEY_LOCAL_MACHINE\system\currentcontrolset\control\keyboard layouts中的条目。
例如,如果我在GetKeyboardLayoutList中有一个像0x040C0409这样的条目,这将指示使用法语键盘布局的英语语言。我认为在这种情况下,您会希望在0000040C下查找该条目。
找到正确的注册表路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\
后,您可以使用SHLoadIndirectString调用从Layout Display Name
键获取本地化的键盘布局名称(还有Layout Text
键是用于遗留目的的布局名称),如此处所述。第一节第一节第一节第一节第一节第二节第一节
fnx2tebb3#
没有内置函数可以完成此操作。您可能需要使用此处发布的解决方案:How to convert Microsoft Locale ID (LCID) into language code